Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel复选框actionlistener将不会取消可编辑的JtextFields_Java_Swing_Checkbox_Hashmap - Fatal编程技术网

Java JPanel复选框actionlistener将不会取消可编辑的JtextFields

Java JPanel复选框actionlistener将不会取消可编辑的JtextFields,java,swing,checkbox,hashmap,Java,Swing,Checkbox,Hashmap,我有一个面板,上面有几个JTextFields,每个字段旁边都有一个对应的复选框——这些字段通过地图成对链接。 我已经编写了代码,当选中或取消选中每个复选框时,相应的JTextFields分别变得不可编辑或可编辑(这是在没有映射的情况下完成的)。这部分很好用 然而,我希望有一个复选框可以用这种方式控制所有的JTextFields。我认为最好的方法是迭代映射键/值对,这样如果我以后想添加更多的框/字段,那么我就可以很容易地将它们添加到映射中。目前,在我的代码中,当我选中此主复选框(checkBox

我有一个面板,上面有几个JTextFields,每个字段旁边都有一个对应的复选框——这些字段通过地图成对链接。 我已经编写了代码,当选中或取消选中每个复选框时,相应的JTextFields分别变得不可编辑或可编辑(这是在没有映射的情况下完成的)。这部分很好用

然而,我希望有一个复选框可以用这种方式控制所有的JTextFields。我认为最好的方法是迭代映射键/值对,这样如果我以后想添加更多的框/字段,那么我就可以很容易地将它们添加到映射中。目前,在我的代码中,当我选中此主复选框(checkBoxAllNormal)时,所有JTextFields都将不可编辑(如预期),但是当我取消选中主复选框时,JTextFields仍将不可编辑

    map.put(checkBox_1, textField);
    map.put(checkBox_2, textField_1);
    map.put(checkBox_3, textField_2);
    map.put(checkBox_4, textField_3);

    JCheckBox checkBoxAllNormal = new JCheckBox("");
    checkBoxAllNormal.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (checkBoxAllNormal.isSelected()){
                Iterator it = map.entrySet().iterator();
                while(it.hasNext()){
                    Map.Entry pair = (Map.Entry)it.next();
                    ((JTextField) pair.getValue()).setEditable(false);
                    it.remove();
                }
            }
            else{
                Iterator it = map.entrySet().iterator();
                while(it.hasNext()){
                    Map.Entry pair = (Map.Entry)it.next();
                    ((JTextField) pair.getValue()).setEditable(true);
                    it.remove();
                }
            }
        }
    });
据我所知,问题在于第二个问题

  while(it.hasNext()){

但我不知道为什么或如何解决这个问题,但我觉得我使用地图可能是原因。

虽然我没有找到问题所在,但我找到了一种迭代地图的方法,该方法可以正常工作。我认为问题在于我用来迭代的过程

    JCheckBox checkBoxAllNormal = new JCheckBox("");
    checkBoxAllNormal.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (checkBoxAllNormal.isSelected()){
                for(Entry<JCheckBox,JTextField> entry: map.entrySet()){
                    entry.getValue().setEditable(false);
                }
            }
            else{
                for(Entry<JCheckBox,JTextField> entry: map.entrySet()){
                    entry.getValue().setEditable(true);
                }
            }
        }
    });
JCheckBox checkbox allnormal=newjcheckbox(“”);
checkBoxAllNormal.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
if(复选框allnormal.isSelected()){
for(条目:map.entrySet()){
entry.getValue().setEditable(false);
}
}
否则{
for(条目:map.entrySet()){
entry.getValue().setEditable(true);
}
}
}
});
我将把这个问题留待以后讨论,以防对将来的人有所帮助