Java JPanel复选框actionlistener不会无法编辑JtextFields

时间:2017-03-20 02:05:37

标签: java swing checkbox hashmap

我有一个带有几个JTextFields的面板,每个面板旁边都有一个相应的复选框 - 这些是通过地图成对链接的。 我编写了代码,当选中或取消选中每个复选框时,相应的JTextField分别是不可编辑或可编辑的(这是在没有地图的情况下完成的)。这部分效果很好。

但是我希望有一个可以用这种方式控制所有JTextField的复选框。我认为最好的方法是迭代地图键/值对,这样如果我想稍后添加更多的框/字段,那么我可以轻松地将其添加到地图中。目前在我的代码中,当我选择此主复选框(checkBoxAllNormal)时,所有JTextField都变为不可编辑(按预期),但是当我取消选中main复选框时,JTextField仍然是不可编辑的。

    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()){

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

1 个答案:

答案 0 :(得分:0)

虽然我没有找到问题所在,但我找到了一种方法来迭代正确运行的地图。我认为问题在于我用来迭代的过程。

    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);
                }
            }
        }
    });

我会留下这个问题,以防将来帮助某人。