为了账号安全,请及时绑定邮箱和手机立即绑定

在 ItemListener 中显示消息对话框可防止选择复选框

在 ItemListener 中显示消息对话框可防止选择复选框

胡子哥哥 2021-06-15 17:19:52
我注意到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. 不过,这似乎太难了,不能被认为是一个合适的解决方案。
查看完整描述

1 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

用你的模态对话框包围 SwingUtilities.invokeLater


SwingUtilities.invokeLater(new Runnable() {

    @Override

    public void run() {

        showMessageDialog(rootPane,

            "The checkbox selection did not work.",

            "SSCCE",

            INFORMATION_MESSAGE);

    }

});


查看完整回答
反对 回复 2021-06-23
  • 1 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信