猿问

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

我注意到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. 不过,这似乎太难了,不能被认为是一个合适的解决方案。


胡子哥哥
浏览 135回答 1
1回答

肥皂起泡泡

用你的模态对话框包围 SwingUtilities.invokeLaterSwingUtilities.invokeLater(new Runnable() {    @Override    public void run() {        showMessageDialog(rootPane,            "The checkbox selection did not work.",            "SSCCE",            INFORMATION_MESSAGE);    }});
随时随地看视频慕课网APP

相关分类

Java
我要回答