【问题标题】:Java JPanel checkbox actionlistener will not un-editable JtextFieldsJava JPanel 复选框 actionlistener 将不可编辑 JtextFields
【发布时间】:2017-03-20 10:14:56
【问题描述】:

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

但是,我希望有一个可以以这种方式控制所有 JTextField 的复选框。我认为最好的方法是遍历映射键/值对,这样如果我想稍后添加更多框/字段,那么我可以很容易地做到这一点,只需将它们添加到映射中即可。目前在我的代码中,当我选择此主复选框 (checkBoxAllNormal) 时,所有 JTextField 都变得不可编辑(如预期的那样),但是当我取消选择主复选框时,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()){

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

【问题讨论】:

    标签: java swing checkbox hashmap


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2012-11-13
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多