2012-09-26 98 views
2

比方说,我们有一个复选框:有没有办法在对象名称中使用变量?

JCheckBox lang_1 = new JCheckBox("English");

另外,我们有一个被绑定到一个ActionListener一个变量,所以当动作事件发生时它正在发生变化。这是ActionEvent的变量:

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

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

有什么办法混合 “lang_” 与简写为,因为我会使用lang_1?

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

+1

你可以用[反射](http://docs.oracle.com/javase/tutorial/reflect/index.html)来完成,但在将此逻辑添加到产品代码之前检查缺陷部分。 – Azodious

+0

我不知道反射,谢谢! – roncsak

回答

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); 

您需要添加相关的边界错误处理代码,数字解析等。

+0

很容易填充,很容易以后使用。 不错的解决方案,谢谢! – roncsak

2

是的,你可以使用反射来做到这一点。

以下示例假定您将代码与具有组合框的代码放在同一个类中作为字段。我不得不承认它看起来很丑:) :)。

assylias的解决方案更清晰,自我解释和“语法”,后者总是在静态类型语言中处理事情的好方法。

+0

首先,我试过你的,但'getField()'没有'getMethod()'方法。我怎样才能正确地获得它? – roncsak

+0

最后,我接受了其他建议,但我非常喜欢这一个!谢谢! – roncsak

相关问题