1

いくつかのチェックボックスと2つのカウンターがあります...counter1次のコードでチェックされているチェックボックスの数をカウントします

if (isChecked) {
    counter++;
} else {
    counter--;
}

これは魅力のように機能しcounter2ますが、「緑」グループに属するチェックボックスを追跡したいのですが、たとえば、チェックボックス1、2、4、7は「緑」グループに属し、チェックボックス3、5は6、8ではありません。

if (chk1.isChecked() || chk2.isChecked() || chk4.isChecked() || chk7.isChecked()) {
    counter2++;
}

if else「緑」のグループがどれだけチェックされているかを確認するために別のものを使用しようとしましたが、使用すると

System.out.println(counter2);

次に、常にの値を取得しますcounter1。なぜこうなった?counter1すべてのチェックボックスをチェックして却下したためcounter2ですか?

4

2 に答える 2

2
int counter2 = 0; // reset counter    
for (Checkbox chk : allCheckboxes)  
    {   
       if (chk.isChecked() && isGreen(chk)) {
           counter2++;
       }  
    }   
    //...

と実用的な方法

private boolean isGreen(Checkbox chk)  
{  
 // return true is checkbox is green  
}
于 2012-08-24T11:01:38.123 に答える
2

上記のコメントで述べたように、チェックボックスのいずれかがチェックされているかどうかを一度チェックします。counter2が常にcounter1と同じ値を示している場合、それは単純なタイプミスなどの結果である可能性があります。あなたのコードを見ずに言うことは不可能です。しかし、変数は別の変数を単に無効にすることはできません。

とを使用SwingしていJCheckBoxますか?もしそうなら、ItemListenerまだ持っていない場合は、それに追加することができます。次に、チェックボックスの現在の状態を反映するようにカウンターを動的に更新できます。メソッドのコードは次のitemStateChangedようになります。

public void itemStateChanged(ItemEvent arg0) {
    if (arg0.getStateChange() == ItemEvent.DESELECTED) { 
        counter--;
    } else {
        counter++;
    } 
    // update label or something
}



緑のグループに別ItemListenerのものを使用できます。これにより、が追加で設定されます。これにより、すべての反復チェックから解放されます。counter2

于 2012-08-24T11:22:20.953 に答える