假设我们有一个复选框:
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();
)
答案 0 :(得分:4)
最简单的方法是将JCheckBox放入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);
您需要在边界,数字解析等上添加相关的错误处理代码。
答案 1 :(得分:2)
是的,您可以使用反射来执行此操作。
以下示例假设您将代码与具有组合框作为字段的类相同。
this.getClass().getField("lang_" + yourIndex).
getMethod("setEnabled", new Class<?>[]{ boolean.class}).
invoke(
this.getClass().getField("lang_" + yourIndex).get(this),
new Object[] { true }
);
我必须承认它看起来很丑:)。
assylias的解决方案更加清晰,自我解释和“语法”,后者始终是在静态类型语言中处理事物的好方法。