动态添加项目到 JComboBox

新手上路,请多包涵
Vector comboBoxItems = new Vector();
DefaultComboBoxModel model;
// ComboBox Items have gotten from Data Base initially.
model = new DefaultComboBoxModel(ComboBoxItems);
JComboBox box = new JComboBox(model);

我将此组合框添加到面板中。如果我直接在数据库中添加一些项目,我希望在组合框中显示那些新添加的项目。

我可以在调试时看到 comboBoxItems 中的值,但这些值没有出现在我的组合框中。

如何在不关闭面板的情况下将这些新添加的值放入组合框中?

原文由 raj 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 558
2 个回答

使用 ComboBoxModel 怎么样?像这样的东西……

     JFrame frame = new JFrame("Combo Box Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200, 200);
    frame.setLayout(new FlowLayout());

    Vector comboBoxItems=new Vector();
    comboBoxItems.add("A");
    comboBoxItems.add("B");
    comboBoxItems.add("C");
    comboBoxItems.add("D");
    comboBoxItems.add("E");
    final DefaultComboBoxModel model = new DefaultComboBoxModel(comboBoxItems);
    JComboBox comboBox = new JComboBox(model);
    frame.add(comboBox);

    JButton button = new JButton("Add new element in combo box");
    frame.add(button);
    button.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            model.addElement("F");
        }
    });

    frame.setVisible(true);

原文由 Harry Joy 发布,翻译遵循 CC BY-SA 3.0 许可协议

例如:

在此处输入图像描述在此处输入图像描述在此处输入图像描述

 import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class ComboBoxSorted extends JFrame {

    private static final long serialVersionUID = 1L;
    private JComboBox comboBox;
    private JTextField textField;

    public ComboBoxSorted() {
        textField = new JTextField(15);
        textField.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                comboBox.addItem(textField.getText());
                textField.setText("");
                comboBox.showPopup();
            }
        });

        String[] items = {"one", "two", "three", "four", "five"};
        SortedComboBoxModel model = new SortedComboBoxModel(items);
        comboBox = new JComboBox(model);
        comboBox.setPrototypeDisplayValue("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
        JFrame frame = new JFrame("Add Item on Runtime");
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.add(comboBox, BorderLayout.SOUTH);
        frame.add(textField, BorderLayout.WEST);
        frame.add(new JLabel("Enter to add Item  "), BorderLayout.EAST);
        frame.pack();
        frame.setLocation(150, 150);
        frame.setVisible(true);
    }

    private class SortedComboBoxModel extends DefaultComboBoxModel {

        private static final long serialVersionUID = 1L;

        public SortedComboBoxModel() {
            super();
        }

        public SortedComboBoxModel(Object[] items) {
            Arrays.sort(items);
            int size = items.length;
            for (int i = 0; i < size; i++) {
                super.addElement(items[i]);
            }
            setSelectedItem(items[0]);
        }

        public SortedComboBoxModel(Vector items) {
            Collections.sort(items);
            int size = items.size();
            for (int i = 0; i < size; i++) {
                super.addElement(items.elementAt(i));
            }
            setSelectedItem(items.elementAt(0));
        }

        @Override
        public void addElement(Object element) {
            insertElementAt(element, 0);
        }

        @Override
        public void insertElementAt(Object element, int index) {
            int size = getSize();
            //  Determine where to insert element to keep model in sorted order
            for (index = 0; index < size; index++) {
                Comparable c = (Comparable) getElementAt(index);
                if (c.compareTo(element) > 0) {
                    break;
                }
            }
            super.insertElementAt(element, index);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                ComboBoxSorted comboBoxSorted = new ComboBoxSorted();
            }
        });
    }
}

原文由 mKorbel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题