3

JCheckboxの(forループを使用して画面に追加された多数のjcheckboxから)選択されたインデックスを取得するにはどうすればよいですか?

// for some t values:
checkBoxes[t] = new JCheckBox("Approve");
checkBoxes[t].addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent  e) {
        boolean selected = checkBoxes[t].isSelected();
        System.out.println("Approved"+selected);
    }
});

チェックボックスをクリックすると、選択したチェックボックスのインデックスを取得したい。

4

4 に答える 4

4

JCheckBox の配列があり、配列を単純に反復処理して、どの JCheckBox が選択されているかを調べることができます。

それにかんする:

チェックボックスをクリックすると、選択したチェックボックスのインデックスを取得したい。

編集: getSource()ActionListener に渡された ActionEvent のメソッドを使用して、どのチェックボックスが選択されたかを確認できます。たとえば、ActionListener を次のように変更できます。

checkBoxes[t].addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent  e) {
    boolean selected = checkBoxes[t].isSelected();
    System.out.println("Approved"+selected);

    int index = -1;
    for (int i = 0; i < checkBoxes.length; i++) {
      if (checkBoxes[i] == e.getSource()) {
        index = i;
        // do something with i here
      }
    }
  }
});
于 2012-09-03T12:11:45.263 に答える
1

私が理解している限りJCheckBox、ユーザーのアクションに適切に対応するために、選択したのインデックスを取得したいと考えています。

この場合、別のアプローチを検討することをお勧めしItemListenerます。チェックボックスごとに を登録できます。

JCheckBox check = new JCheckBox("Approve");
check.addItemListener(new ItemListener() {
  public void itemStateChanged(ItemEvent e) {
    if (check.isSelected()){
      System.out.println(check.getName() + " is selected");
    }
  }
});

( java2s.com チュートリアルに触発)

この場合、イベントはすぐに発生し、どのチェックボックスがクリックされたかを常に知ることができます。

于 2012-09-03T12:51:21.587 に答える
0

私は次のようなことを試します:

for (int i=0; i < checkBoxes.length; i++) {
if (checkBoxes[i].isSelected() == true) {
index = i; }
return index; }

あなたの質問から、これがあなたが探しているものです。

編集:

私の上記の前の方法は、1 つのボックスのみが選択され、どのボックスも選択解除されないという非常に素朴なアプローチになるため、欠陥があります。

「e」は ActionEvent オブジェクトです。

for (int i=0; i < checkBoxes.length; i++) {
if (checkBoxes[i] == e.getSource()) {
index = i; } }
return index; 

このようにして、最新の選択または選択解除のチェック ボックスが識別されます。

于 2012-09-03T12:34:57.570 に答える
0

チェックボックスを反復処理し、 isSelectedフラグを確認します

于 2012-09-03T12:36:56.683 に答える