代码之家  ›  专栏  ›  技术社区  ›  user6566753

JCheckBox自动取消选择

  •  0
  • user6566753  · 技术社区  · 9 年前

    当我选择 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 回复  |  直到 9 年前
        1
  •  2
  •   camickr    9 年前

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

    一种解决方案是将代码包装为在 SwingUtilities.invokeLater(...) .

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

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