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

时间:2018-08-01 18:32:33

标签: java swing messagebox event-dispatch-thread

我注意到,当在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问题相关,但没有得到应有的答案。

1 个答案:

答案 0 :(得分:2)

HomeAddress包围模式对话框

WorkAddress