2017-08-12 26 views
0

我想在GUI中填充多個JComboBox。所以我想用一個方法來接受每個JComboBox名稱作爲參數。這可能嗎?如何使用接受字符串作爲組合框名稱的方法來填充JComboBox

cmbCustomers.addItem("customer name"); 

在上面的代碼中,我想用傳遞給填充方法的任何可能的字符串替換cmbCustomers。

我試圖從填充方法中傳遞一個字符串參數來動態替換cmbCustomers組合框,但它確實看起來不可能。

我在使用數據庫中的數據填充JTables的GUI。選擇特定JTable中的一行將填充選定行數據的一組JComboBoxes。從這裏數據可以使用JComboBoxes進行更改並保存回數據庫。由於多個JComboBoxes我想避免重複這麼多的代碼。

+1

你能發佈你的完整代碼嗎 – Akash

+0

你的問題實質上是「我怎樣才能把一些對象與一個字符串?」。一個答案是使用一個'HashMap ',它將成對的字符串與JComboBox關聯起來。說了這些,你的問題有一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)的味道,你問如何解決一個特定的代碼問題當最好的解決方案是使用完全不同的方法。更好的是,你告訴我們你正試圖解決的整體問題,而不是你目前如何解決問題。 –

+0

你可以參考這個鏈接文件http://www.java2s.com/Tutorial/Java/0240__Swing/AddItemstoJComboBox.htm – Akash

回答

1

通常,Java變量名只能在編譯時使用。您不能在運行時使用字符串值作爲變量名稱。相反,你應該使用通用的面向對象原則來解決你的問題。在這種情況下,你可以寫它接受的JComboBox參數的方法:

private void populateComboBox(JComboBox comboBox) { 
    comboBox.addItem("customer name"); 
    // ... do anything else you wish with the comboBox 
} 

現在你可以調用此方法與任何JComboBox中。請注意,傳遞給方法的參數名稱與無關。它可以是任何你想要的。例如:

JComboBox cmbCustomers = new JComboBox(); 
populateComboBox(cmbCustomers); 

JComboBox cmbOtherCustomers= new JComboBox(); 
populateComboBox(cmbOtherCustomers); 

我強烈建議你學習儘可能多地瞭解方法和參考變量。這些概念對於Java編程非常重要,它將幫助您瞭解上述建議,並幫助您在未來使用它們解決類似問題。

1從技術上講,您可以使用Reflection API來執行此操作。反射旨在用於代碼工具中的代碼自省,而不是用於標準的日常編程。你絕對不應該用它來解決常見的問題,例如這裏所問的問題。

+0

迄今爲止尚不完整的問題的體面回答。 –

0

爲什麼要爲任何動態創建代碼名稱?極有可能會有任何理由這樣做。如果您打電話給組合框「box1」或「mybox」,它有什麼不同?如果在運行時不知道組合框的變量名,那麼如何編寫代碼來操作組合框的內容?

也就是說,所有組件都有一個setName()和一個getName()方法,並且您可以隨時修改該內部名稱。然後,你可以做這樣的事情:

if (box1.getName().equals(something)) { 
    fillCustomers(box1, customers); 
    } else if (box2.getName().equals(something) { 
    fdillCustomers(box2, customers); 
    } 

誠然,這是一個相當糟糕的設計使用修改是在一個特定的組合框什麼類型的東西,但它可以做到的。

相關問題