Java:JCheckBox不会继续使用ItemListener进行检查

时间:2015-03-21 18:31:42

标签: java swing jcheckbox itemlistener

好的,我是听众的新手(仍在学习语言),这是我第一次全面尝试实现它们(即不仅仅是教科书中的练习题)。

到目前为止,除了一个大错误之外,一切都运行良好:复选框不会保持检查状态。我分配它们的ItemListener运行完美(我设置了一个JOptionPane来触发让我知道它是否正常工作),但是盒子本身并没有保持检查。

我甚至更进一步添加了条件逻辑,如果它的状态被检查而未经检查,并且发现当我单击该框时,两个状态都被触发。所以我得到了两个JOptionPane弹出窗口,一个带有消息的选项,如果选中该框,如果没有选中该框,则显示一个。

我在这里包含我的代码。我做错了什么?

PS。您会注意到代码具有条件逻辑,可以添加单选按钮或复选框。程序最终运行时,将以两种格式在多个位置生成此组件。单选按钮工作正常,这是我遇到上述问题的复选框。

创建复杂文件并指定听众的代码:

public OtherField(int voteFor){


            this.voteFor = voteFor;


            otherPanel = new JPanel();
            otherPanel.setLayout(new GridLayout(1, 3));


            otherField = new JTextField(10);
            otherField.setHorizontalAlignment(SwingConstants.CENTER);

            JLabel otherLabel;
            otherLabel = new JLabel("Other", SwingConstants.CENTER);

            otherRadio = new JRadioButton("", false);
            otherRadio.setHorizontalAlignment(SwingConstants.CENTER);
            otherRadio.addActionListener(new OtherFieldRadioListener());

            otherCheckBox = new JCheckBox("");
            otherCheckBox.setHorizontalAlignment(SwingConstants.CENTER);
            otherCheckBox.addItemListener(new OtherFieldCheckBoxListener());

            otherPanel.add(otherLabel);
            otherPanel.add(otherField);

            if(voteFor == 1){
                otherPanel.add(otherRadio);
            }else{
                otherPanel.add(otherCheckBox);
            }



        }

LISTENER CODE(它是与上面代码在同一类中的私有类):

private class OtherFieldCheckBoxListener implements ItemListener{
            public void itemStateChanged(ItemEvent e){
                String name = otherField.getText();
                if(e.getStateChange() == ItemEvent.SELECTED){
                    JOptionPane.showMessageDialog(null, name);
                }else{
                    JOptionPane.showMessageDialog(null, "Not Selected");
                }


            }   
        }

1 个答案:

答案 0 :(得分:0)

我要尝试的第一件事是在初始化时将复选框设置为true或false,即

otherCheckBox.setSelected(false) 

如果这不起作用,我会检查每次选中复选框时是否从其他地方调用OtherField,从而重新绘制组件/重置选择(使用调试器并在OtherFields的开头设置断点)