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");
}
});
}
}
}
当我 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");
}
});
}
}
}