2012-09-26 96 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

相關問題