如何在使用glazedList..evenlist时更新comboBox

时间:2014-02-05 08:28:52

标签: java combobox jcombobox auto-update glazedlists

好吧。我已经尝试了脱掉袖子的每一个技巧..但是无法弄清楚如何更新comboBox w / glazedList ..如果输入来自其他类..尝试将值传递给方法,声明它首先是一个字符串...等等..但是没有工作..如果新项目将来自同一个类,它确实有效..通过点击一个按钮..      到目前为止我已经有了这个代码..

 values = GlazedLists.eventListOf(auto);//auto is an array..
    AutoCompleteSupport.install(comboSearch,values);//comboSearch is the comboBox

//"x" is the value coming from another class.

public void updateCombo(String x){
        List<String> item = new ArrayList<>();
        item.add(x)
        value.addAll(item);
 }

我希望这些代码足以解释我想要问的内容。

1 个答案:

答案 0 :(得分:3)

您无法看到自己如何创建组合框和事件列表。因此,我将从头开始创建一个简单的示例应用程序,向您展示基本要素。

如果您不熟悉一般概念,主要的主要观点是:

  • 尝试并避免使用标准Java集合(例如ArrayList,Vector)并尽快使用EventList类。排序/过滤/自动完成带来的所有好处都依赖于EventList基础,所以尽快设置一个,然后简单地操作(添加/删除/等),然后GlazedLists管道将负责其余部分。
  • EventList中获得对象集合并想要利用swing组件后,请查看包含所需内容的ca.odell.glazedlists.swing模块。在这种情况下,您可以在事件列表中使用EventListComboBoxModel - 传递,然后将您的JComboBox模型设置为使用新创建的EventListComboBoxModel,从那时起,GlazedLists将负责确保您的列表数据结构和组合框保持同步。

所以在我的例子中,我创建了一个空的组合框和一个按钮。单击该按钮会将每次单击的项目添加到组合框中。魔术就是创建EventList并使用EventListComboBoxModel将列表链接到组合框。

请注意以下代码仅针对GlazedLists 1.8进行了测试。但我很确定它也可以在1.9或1.7下正常工作。

public class UpdateComboBox {

    private JFrame mainFrame;
    private JComboBox cboItems;
    private EventList<String> itemsList = new BasicEventList<String>();

    public UpdateComboBox() {
        createGUI();
    }

    private void createGUI() {
        mainFrame = new JFrame("GlazedLists Update Combobox Example");
        mainFrame.setSize(600, 400);
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JButton addButton = new JButton("Add Item");
        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                itemsList.add("Item " + (itemsList.size()+1));
            }
        });

        // Use a GlazedLists EventComboBoxModel to connect the JComboBox with an EventList.
        EventComboBoxModel<String> model = new EventComboBoxModel<String>(itemsList);
        cboItems = new JComboBox(model);

        JPanel panel = new JPanel(new BorderLayout());
        panel.add(cboItems, BorderLayout.NORTH);
        panel.add(addButton, BorderLayout.SOUTH);

        mainFrame.getContentPane().add(panel);
        mainFrame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
          new UpdateComboBox();
        }
    });
    }
}