我注意到当在
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
. 不过,这似乎太老套了,不能被认为是一个合适的解决方案。
This
问题是相关的,但没有得到一个像样的答案。