2017-03-20 22 views
0

私はいくつかのJTextFieldを持つパネルを持っています。それぞれの隣に対応するチェックボックスがあり、地図を介してペアでリンクされています。 各チェックボックスが選択または選択解除されたときに、対応するJTextFieldが編集不可能になるコードを記述しました(これはマップなしで行われます)。この部分はうまくいきます。Java JPanelチェックボックスactionlistenerは編集不可能なJtextFieldではありません

しかし、私はこのようにすべてのJTextFieldを制御できる1つのチェックボックスを持っています。これを行う最善の方法はマップのキーと値のペアを反復することだと思ったので、後でボックス/フィールドを追加したい場合は、簡単にマップに追加できます。現在、私のコードでは、このメインチェックボックス(checkBoxAllNormal)を選択すると、JTextFieldはすべて編集不可能になりますが、メインチェックボックスの選択を解除すると、JTextFieldは編集不能のままです。私は2番目

while(it.hasNext()){ 

であるしかし、私はなぜか、どのようにこの問題を解決するために知っているが、私は地図の私の使用を感じていることはおそらくありません、問題を伝えることができるものから、

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

原因。

答えて

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

将来この問題を解決するためにこの質問を残しておきます。

関連する問題