2015-05-27 65 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

感谢您的更新。很高兴听到 :) –