2015-05-27 62 views
-1

我正在使用JComboBox在我的小程序中顯示String[]。現在我需要在我的項目中在之前的面板中執行一些操作後填充組合框。從數據庫中檢索數據後JComboBox項目刷新

這裏下面是我寫的代碼:

JComboBox comboBox = new JComboBox(model); 
comboBox.setMaximumRowCount(100); 
comboBox.setEditable(true); 
comboBox.setBounds(142, 196, 277, 20); 

如何使這一作出相應的反應在以前的面板執行我的行動?

+0

*「如何根據我在前面面板中執行的操作做出相應的反應?」*您嘗試了什麼?預期的行爲是什麼?目前的行爲是什麼?一般提示:1)爲了儘快提供更好的幫助,請發佈[MCVE](http://stackoverflow.com/help/mcve)(最小完整可驗證示例)或[SSCCE](http://www.sscce.org/) (簡短,獨立,正確的例子)。 .. –

+0

.. 2)Java GUI必須在不同的語言環境中使用不同的PLAF來處理不同的操作系統,屏幕大小,屏幕分辨率等。因此,它們不利於像素的完美佈局。請使用佈局管理器或[它們的組合](http://stackoverflow.com/a/5630271/418556)以及[white space]的佈局填充和邊框(http://stackoverflow.com/a/17874718/ 418556)。 –

+0

.. 3)爲什麼要編寫一個小程序?如果是由於老師指定它,請將它們轉介給[爲什麼CS教師應該**停止**教Java applets](http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop教學-java的小應用程序/)。 –

回答

1

當您更改「模型」時,組合框視圖應自動更新(因爲標準或精心編寫的ComboBoxModel會通知視圖需要更改)。

E.g.將「model」設置爲DefaultComboBoxModel類型,然後在執行該「在其他窗格上的操作」時 - 確保您的代碼可以訪問「model」並對其進行更改。相反地​​,這可以是直接訪問:

actionPerformed(...){ // action from other pane 
    ... // some logic 
    otherPane.model.removeAllElements(); 
    otherPan.model.addElement(...) 
} 

然而,更好的設計不太直接,您的操作可能觸發您自己的事件(例如「productsAddedToMyStore」),並且該窗格可以聽取它並更新模型。這減少了組分之間的耦合。

+0

非常感謝。現在它運行得很好。現在comboBox刷新從數據表中拉出的新數據... –

+0

感謝您的更新。很高興聽到 :) –