我有一个带有几个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()){
但我不知道为什么或如何解决这个问题,但我觉得我对地图的使用可能就是原因。
答案 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);
}
}
}
});
我会留下这个问题,以防将来帮助某人。