2

次のような 3 つの JCheckBox があります。

final JCheckBox c1 = new JCheckBox("A");
final JCheckBox c2 = new JCheckBox("B");
final JCheckBox c3 = new JCheckBox("C");

次のように、このチェックボックスの ButtonGroup でグループを作成します。

final ButtonGroup bg = new ButtonGroup();
bg.add(c1);
bg.add(c2);
bg.add(c3);

次のようなラベルに選択したアイテムを表示するボタンがあります。

String SelectedItem=""; 
Enumeration<AbstractButton> items= bg.getElements();
while (items.hasMoreElements()) {
    AbstractButton btn = items.nextElement();
if(btn.isSelected())
{
        SelectedItem+=btn.getText()+",";
    }
 }
 lblA.setText(SelectedItem);

これは問題なく動作しますが、実行時に複数のチェック ボックスを選択できません。

4

2 に答える 2

10

の目的ButtonGroupは複数排他選択です。ButtonGroupボタンのコレクションが必要な場合にのみ作成しないでください。ButtonGroupのような標準コレクションを使用する代わりに、ArrayList.

List<JCheckBox> buttons = new ArrayList<>();
buttons.add(c1);
buttons.add(c2);
buttons.add(c3);

...

for ( JCheckbox checkbox : buttons ) {
    if( checkbox.isSelected() )
    {
        SelectedItem += btn.getText() + ",";
    }
}

その他の通知: .setTextSwing イベント スレッド ( invokelater) で更新 ( ) を行います。このような連結で StringBuilder を作成する方がよいことを思い出してください。ただし、このような UI コンポーネントの量では、パフォーマンスへの影響はおそらく目立たないでしょう。

于 2013-10-08T11:23:07.633 に答える