3

JFrameに11の異なるチェックボックスがあり、1つがチェックされたときに、合計がいくつチェックされているかを確認できるようにしたいと考えています。ItemListenerを設定して、1つがチェックされているかどうかを確認する方法は知っていますが、すべてをチェックする方法がわかりません。

編集:

cblistは、11個のJCheckBoxを含むArrayListです。すべてのJCheckBoxにアイテムリスナーを指定しました。これは、チェックボックスがクリックされたときに使用されるクラスです...

private class CheckClass implements ItemListener{
      public void itemStateChanged(ItemEvent event){
         for(cblist.isChecked){
             ingnum++;
         }

      }
  }

forループで、ArrayListのすべての要素をテストするにはどうすればよいですか。構文が現在正しくないことを理解しています。

4

4 に答える 4

6

1つの方法:すべてのJCheckBoxを配列に配置するかArrayList<JCheckBox>、必要に応じてリストを繰り返し処理して、選択されているチェックボックスを確認します。

別の可能な解決策:表形式の構造がある場合は、モデルにブール値を保持するJTableを使用し、必要に応じてTableModelの行を反復処理して、Boolean.TRUE値を保持する行を確認します。

于 2012-04-06T14:52:33.433 に答える
2

私の提案(おそらく最善ではない)は、すべてのチェックボックスをリストに保持することです。

したがって、すべての JCheckBoxex のリスナーは次のようになります。

void stateChanged(ChangeEvent e){
    if( CheckBox is checked){
       // add the checkbox in the list.
    } else {
        // remove CheckBox in the list.
     }
}

チェックされている checkBox の数を知るには、リストのサイズを数えるだけです。

よろしく。

于 2012-04-06T14:55:48.590 に答える
2

グローバルカウンターcountCheckedを保持してフレームを作成できますimplements ItemListener

JCheckBoxフレーム内のすべてのchkBox.addItemListener(this)イベントを処理します

public class MyFrame extends JFrame implements ItemListener{

private int countChecked = 0;
private JPanel contentPane;
    public MyFrame() {
    contentPane = new JPanel();
    setContentPane(contentPane);
    JCheckBox chckbx = new JCheckBox("New check box");
    contentPane.add(chckbx, BorderLayout.CENTER);
    chckbx.addItemListener(this);
}

@Override
public void itemStateChanged(ItemEvent ie) {
    if(ie.getSource().getClass() == JCheckBox.class)
    {
        if(ie.getStateChange() == ie.SELECTED)
            countChecked++;
        else if(ie.getStateChange() == ie.DESELECTED)
            countChecked--;
    }

} 
}
于 2012-04-06T15:13:21.940 に答える
1

すべてのチェックボックスに「ActionPerformed」イベントリスナーを追加し、イベントハンドラーメソッド内でこのメソッドを呼び出して、チェックされたチェックボックスの数を取得します。

int countCheckedCheckBoxes(){
    Component[] cs = getRootPane().getComponents();
    int checkNums = 0;
    for(Component c : cs){
        if(c instanceof JCheckBox){
            if(((JCheckBox)c).isSelected()){
                checkNums++;
            }
        }
    }
    return checkNums;
}

getRootPane は、コンポーネントが配置されているメイン パネルを返す必要があります。

于 2012-04-06T15:23:58.960 に答える