2

假设我们有一个复选框:

JCheckBox lang_1 = new JCheckBox("English");

此外,我们有一个绑定到 ActionListener 的变量,因此当 ActionEvent 发生时它会发生变化。这是 ActionEvent 中的变量:

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

现在,我有abbr等于1所以我想lang_1.setEnabled(true);

有什么方法可以将 "lang_" 与abbr混合使用,就像我使用 lang_1 一样?

(在 jQuery 中你可以这样做$("lang_"+abbr).doSomethingFunction();:)

4

2 回答 2

4

最简单的方法是将您的 JCheckBoxes 放在一个数组列表中并使用它们的索引调用它们:

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 回答