更新JComboBox

时间:2014-03-08 18:27:26

标签: java swing arraylist jcombobox

所以我使用JComboBox ArrayList

protected JComboBox<String> jcb;
protected ArrayList<String> favourites;
favourites.add("Favourites");
favourites.add("-0.21 + 0.77");
favourites.add("-0.16 + -0.89");
jcb = new JComboBox(favourites.toArray());

这很好用,我可以选择每个选项并执行我需要做的选定语句。但是,当我希望更新JComboBox时,它不会在我的GUI上更新。我称之为另一种方法:

favourites.add("10 + 4");
jcb.revalidate();
jcb.repaint();

我已经测试ArrayList已经更新(见下文),但它没有在我的GUI上显示任何建议?谢谢,

for (String s : favourites)
System.out.println(s);

2 个答案:

答案 0 :(得分:5)

Swing基于MVC模式。因此使用模型。对模型的更改将自动更新JComboBox。为了更深入地理解,请阅读Swing Architecture Overview和您的案例How to use ComboBoxes

DefaultComboBoxModel favourites = new DefaultComboBoxModel();
favourites.addElement("Favourites");
favourites.addElement("-0.21 + 0.77");
favourites.addElement("-0.16 + -0.89");
jcb = new JComboBox(favourites);

在其他GUI方法调用中

favourites.addElement("10 + 4");

答案 1 :(得分:3)

Swing组件遵循MVC模式,因此您必须修改jcombobox的模型,然后模型通知已更改的视图。当您使用DefaultComboBoxModel时,您可以使用addElement来通知侦听器,然后更新视图。

DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>(new String[]{"Favourites","-0.21 + 0.77","-0.16 + -0.89"});
jcb = new JComboBox(model);

当事件发生时。

model.addElement("something");

How to use ComboBoxes

中了解详情