我注意到ItemListener在选择复选框时使用消息框时,它会阻止复选框被选中。这是一个完整的示例,演示了该问题:
import javax.swing.*;
import static java.awt.event.ItemEvent.SELECTED;
import static javax.swing.JOptionPane.INFORMATION_MESSAGE;
import static javax.swing.JOptionPane.showMessageDialog;
public class ExampleFrame extends JFrame
{
private ExampleFrame()
{
JCheckBox jCheckBox = new JCheckBox("Fail");
add(jCheckBox);
jCheckBox.addItemListener(itemEvent ->
{
int stateChange = itemEvent.getStateChange();
if (stateChange == SELECTED)
{
showMessageDialog(rootPane,
"The checkbox selection did not work.",
"SSCCE",
INFORMATION_MESSAGE);
}
});
}
public static void main(String[] arguments)
{
ExampleFrame exampleFrame = new ExampleFrame();
exampleFrame.pack();
exampleFrame.setVisible(true);
}
}
修复此代码以使其显示消息框并且不会中断选择复选框的最佳做法是什么?
我成功地使用了一个额外的线程来执行监听器,将它延迟例如100毫秒,然后在EDT. 不过,这似乎太难了,不能被认为是一个合适的解决方案。
肥皂起泡泡
相关分类