JCheckBox 自动取消选择

JCheckBox deselects automatically

当我 select JCheckBox 时,它会自动删除 selects...

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class Math extends JFrame 
{
    private JPanel panel2 = new JPanel();
    private JCheckBox cb = new JCheckBox("Record Answers");

    //Constructor
    public Math()
    {
        setSize(300,300);
        setTitle("Math");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        panel2.add(cb);

        //add ActionListners
        cb.addItemListener(new listenerCb());

        add(panel2, BorderLayout.SOUTH);            
        setVisible(true);
    }

    //itemListner for cb
    public  class listenerCb implements ItemListener
    {
        public void itemStateChanged(ItemEvent e)
        {       
            if(cb.isSelected())
            {
                JOptionPane.showMessageDialog(null,"Example");

            }
        }
    }
    public static void main(String[] args) 
    {
        new Math();

    }

 }

每当我尝试 select cb 时,它都会弹出 JOPtionPane 和 deselect。 如果我删除 JOptionPane,它工作正常。

我认为问题在于选项窗格正在接收一些事件,因为它现在具有焦点。

一种解决方案是包装代码以在 SwingUtilities.invokeLater(...) 中显示 JOptionPane。

这将允许在显示选项窗格之前以新状态重新绘制复选标记。

public  class listenerCb implements ItemListener
{
    public void itemStateChanged(ItemEvent e)
    {
        if(cb.isSelected())
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    JOptionPane.showMessageDialog(null,"Example");
                }
            });
        }
    }
}