JCheckBox自动取消选择

时间:2016-07-12 20:35:27

标签: java swing events jcheckbox

当我选择JCheckBox时,它会自动取消选择...

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();

    }

 }

每当我尝试选择cb时,它会弹出JOPtionPane并取消选择。 如果我删除JOptionPane,它就可以正常工作。

1 个答案:

答案 0 :(得分:2)

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

一种解决方案是包装代码以在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");
                }
            });
        }
    }
}