0

どうやって聞いたらいいのかわからない。私が取り組んでいるプログラムは完了しましたが、コードが多すぎるようです。コードの一部は次のとおりです。

chkDef1 = new JCheckBox

if (chkDef1.isSelected()) {
            actual = chkDef1.getText();
        } 
else if (chkDef2.isSelected()) {
            actual = chkDef2.getText();
        } 
else if (chkDef3.isSelected()) {
            actual = chkDef3.getText();
        } 
else {
            actual = chkDef4.getText();
        }

chkDef1-4チェックボックスで重複したコードがたくさんある他の領域があります。私がやりたいのは、コードが複製されている領域でループを使用してから、1つの代入ステートメントを使用することです。

私は試しました:if(('chkDef' + counter).isSelected())

また、String変数に「'chkDef' + counter」を割り当ててから、isSelectedを追加してみました。残念ながら、エラーメッセージが表示され続けます。

私は初心者プログラマーなので、自分がやりたいことが可能かどうか、それが何と呼ばれるかはわかりません。可能であれば、どのように説明していただければ幸いです。

4

2 に答える 2

2

単にリストを作成し、checkboxesそれを繰り返し処理します。

ArrayList<JCheckBox> checkboxes  = new ArrayList<JCheckBox>();
//Init your checkboxes array. 

for(JCheckbox chkbox :checkboxes)
{
  if(chkbox.isSelected())
   {
    actual = chkbox.getText() ; break;
  }
}

ただし、必要なことを実行するJCheckboxグループが存在する可能性があります。

ButtonGroupを使用して、要素を反復処理できるようです。

于 2012-11-28T00:25:27.067 に答える
2

すべてのチェックボックスを含む配列を作成してから、配列をループすることができます...

JCheckBox[] boxes = new JCheckBox[] {chkDef1,chkDef2,chkDef3,chkDef4}
for (JCheckBox box : boxes) {
    if (box.isSelected()) {
        actual = box.getText();
        break; // We don't want to loop unnecessarily
    }
}

同様に、可変数の引数を取る単純なメソッドを作成できます...

public String getCheckedItem(JCheckBox... boxes) {
    String actual = null;
    for (JCheckBox box : boxes) {
        if (box.isSelected()) {
            actual = box.getText();
            break; // We don't want to loop unnecessarily
        }
    }
    return actual;
}

そしてそれを次のように呼びます...

String actual = getCheckItem(chkDef1, chkDef2, chkDef3, chkDef4);

個人的にはチェックボックスを返しますが、それはあなた次第です

選択した単一のチェックボックスのみを維持することに関心がある場合(つまり、複数のチェックボックスを選択できないようにする場合)は、代わりにJRadioButtonsを使用することを真剣に検討する必要がありButtonGroupます。

それ以外の場合は、選択したすべてのチェックボックスを収集できます...

public JCheckBox[] getCheckedItem(JCheckBox... boxes) {
    List<JCheckBox> selected = new ArrayList<JCheckBox>(boxes.length);
    for (JCheckBox box : boxes) {
        if (box.isSelected()) {
            selected.add(box);
        }
    }
    return selected.toArray(new JCheckBox[selected.size]);
}
于 2012-11-28T00:27:08.340 に答える