当我在statechange上显示一个对话框时,JCheckbox会改变状态两次,如何修复?

ran*_*ror 7 java swing joptionpane jcheckbox

我有一个复选框,当用户选择它时,应生成一个带有更多信息的对话框,并在用户做出反应时做一些事情.我的代码基本上看起来像这样:

private void onItemStateChanged(java.awt.event.ItemEvent evt) {
    System.out.println("STATE CHANGED!");//TODO debug code
    if (evt.getStateChange() == ItemEvent.SELECTED) {
        int returnVal = JOptionPane.showConfirmDialog(this, "blablatext");
        if (returnVal == JOptionPane.OK_OPTION) {
            this.field1TF.setText("");
            this.field1TF.setEditable(false);
            this.field2TF.setText("");
            this.filed2TF.setEditable(false);
        }else if(returnVal == JOptionPane.NO_OPTION){
            this.field1TF.setText("");
            this.field1TF.setEditable(false);
            this.field2TF.setText("");
            this.field2TF.setEditable(false);
        }
    } else if(evt.getStateChange() == ItemEvent.DESELECTED){
        this.field1TF.setEditable(true);
        this.field2TF.setEditable(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,当我点击它时,我的复选框会一直改变状态两次.它以某种方式与JOptionPane.showConfirmDialog有关,因为如果我对它进行评论,它就会按预期工作.我不知道我应该关心的一些简单的事情,或者我需要做些什么才能得到我想要的反应?(用户点击复选框 - >被问到一个问题 - >选择是/否/取消 - >程序相应地行动)

mKo*_*bel 6

将其更改为ActionListener

JCheckBox http://download.oracle.com/javase/tutorial/uiswing/components/button.html#checkbox

ActionListener http://download.oracle.com/javase/tutorial/uiswing/events/actionlistener.html

  • 我编写监听器时没有问题,我有一个问题,就是复选框的状态连续变化两次,不知何故必须在JOptionpane.showDialog中有它的来源.我这样做.我感谢你的帮助,现在我使用了actionListener,但这篇文章的想法是得到一些提示,为什么我生成的对话框导致复选框再次被取消选中 (3认同)
  • 并没有完全解决不需要的状态更改问题 - 这更像是一种解决方法。 (2认同)