如何将一个arraylist放入java的组合框中?

时间:2015-02-25 15:39:44

标签: java arrays oop arraylist combobox

我的代码

 for (Customer cusList1 : cusList) {
            int numAcc = cusList1.getAccNo();
            for (int c = 0; c<cusList.size(); c++) {
                String arr [] = new String [numAcc];
                arr[c] = cusList1.getName();
                DefaultComboBoxModel RefCMB1 = new DefaultComboBoxModel(arr); //Assign Model data to ComboBoxes from Array
                newNameCombo.setModel(RefCMB1);
            }
    }

我在arraylist中有客户详细信息,我希望将名称放在组合框中。 cusList是ArrayList的名称。 newNameCombo是组合框的名称。

3 个答案:

答案 0 :(得分:1)

为方便起见,您可以使用Vector,尽管它被认为有点过时了。 顺便说一句,你把名字存储在

ArrayList<String>

ArrayList<Customer>

?对于前者,您可以尝试:

ArrayList<String> list = ...
JComboBox<String> comboBox = new JComboBox<>(new Vector<>(list));

,或者如果你不介意,可以先使用Vector。 我更喜欢泛型。实际上,使用数组构建JComboBox也是有效的。

对于后者,您可能希望使用DefaultListCellRenderer。见this。重写getListCellRendererComponent()以将Customer添加到JComboBox中并自行呈现它。 (这是更理想的方式,因为您可以直接设置和检索客户。)

编辑:根据您的代码,我建议:

JComboBox<Customer> comboBox = new JComboBox<>(new Vector<>(cusList));
comboBox.setRenderer(new DefaultListCellRenderer() {
    @Override
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        JLabel label = (JLabel)super.getListCellRendererComponent(list,value,index,isSelected,cellHasFocus);
        label.setText(((Customer)value).getName());
        return label;
    }
});

答案 1 :(得分:0)

您无法使用ArrayList填充DefaultComboBoxModel。

您需要将列表转换为数组或向量并传递给构造函数。

JComboBox cmb_box = new JComboBox(cusList.toArray());

答案 2 :(得分:0)

您可以使用java.util.Vector而不是ArrayList。 Vector通常是一个同步(线程安全)的ArrayList,它还实现了List接口。此外,对Vector的更改将在JComboBox中可见。

Vector<String> data = new Vector<>();
data.add("a");
data.add("b");
JComboBox<String> jComboBox = new JComboBox<>(data);
data.add("c");