2

チェックボックスがあるとしましょう:

JCheckBox lang_1 = new JCheckBox("English");

さらに、ActionListenerにバインドされる変数があるため、ActionEventが発生すると変更されます。これは、ActionEventの変数です。

(String) abbr = JComboBox<ComboItem> comboBox.getSelectedIndex().toString();

今、私は略語が1に等しいので、lang_1.setEnabled(true);

lang_1を使用するのと同じように、「lang_」とabbrを組み合わせて使用​​する方法はありますか?

(jQueryではこれを行うことができます$("lang_"+abbr).doSomethingFunction();:)

4

2 に答える 2

4

最も簡単な方法は、JCheckBoxes を arraylist に配置し、それらのインデックスを使用して呼び出すことです。

List<JCheckBox> boxes = new ArrayList<JCheckBox> ();
boxes.add(new JCheckBox("English"));
// populate the list with the other check boxes

String abbr = JComboBox<ComboItem> comboBox.getSelectedIndex().toString();
int index = Integer.parseInt(abbr);
boxes.get(index).setEnabled(true);

境界、数値解析などに関連するエラー処理コードを追加する必要があります。

于 2012-09-26T07:04:03.697 に答える
2

はい、リフレクションを使用してこれを行うことができます。

次の例では、フィールドとしてコンボ ボックスを持つコードと同じクラスにコードがあると想定しています。

  this.getClass().getField("lang_" + yourIndex).
     getMethod("setEnabled", new Class<?>[]{ boolean.class}).
     invoke(
         this.getClass().getField("lang_" + yourIndex).get(this), 
         new Object[] { true }
     );

私はそれが醜いことを認めなければなりません:)。

assylias のソリューションは、より明確で、自明であり、「構文」であり、後者は、静的型付け言語で物事にアプローチするための常に良い方法です。

于 2012-09-26T07:04:13.163 に答える