1

大家好,我在 JcheckBox 侦听器中添加 joptionpane 时遇到了一些困难


public void itemStateChanged(ItemEvent evt) {

            if(evt.getStateChange() == ItemEvent.SELECTED){
                    ///some code

                        JOptionPane.showMessageDialog(null,  "Message", "Alert",
                                JOptionPane.INFORMATION_MESSAGE);
            }
    }

所以它工作正常,但问题是 JCheckBox 被选中并立即取消选中我该如何解决这个问题?

干杯

4

2 回答 2

3

这里有一些建议(解决方案)使用动作监听器而不是项目监听器。这确实有效,但是,考虑到我建议项目侦听器的所有文本都是复选框的预期侦听器类型,我觉得这很奇怪。

事实上,这是Oracle 错误 ID:6924233承认的已知错误JOptionPane 显然会导致生成另一个事件。

推荐的修复方法是使用 invokeLater 调用 JOptionPane。这可以正常工作,并且只需要对已经将项目侦听器用于其他目的的程序进行少量代码更改。

于 2011-11-28T05:50:55.567 回答
2

问题必须在“///一些代码”中,因为以下测试程序在 Java 6 中适用于我:

public class CheckBoxItemListener {
    public static void main(String[] args) {
        final JCheckBox checkBox = new JCheckBox("Click me");

        JFrame frame = new JFrame("CheckBox Item Listener");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(100, 100, 300, 300);
        frame.add(checkBox);
        frame.setVisible(true);

        checkBox.addItemListener(new ItemListener() {
            @Override
            public void itemStateChanged(ItemEvent evt) {
                if (evt.getStateChange() == ItemEvent.SELECTED){
                    JOptionPane.showMessageDialog(null,  "Message", "Alert",
                            JOptionPane.INFORMATION_MESSAGE);
                }
            }
        });
    }
}

查看 setSelected 或 doClick 调用的省略代码。

于 2010-03-28T13:34:12.807 回答