如何将数组列表放入 java 中的组合框?
how to put an arraylist into a combobox in java?
我的代码
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);
}
}
我在数组列表中有客户详细信息,我想将这些名称放在组合框中。
cusList 是 ArrayList 的名称。 newNameCombo 是组合框的名称。
不能用 ArrayList 填充 DefaultComboBoxModel。
您需要将列表转换为数组或向量并传递给构造函数。
JComboBox cmb_box = new JComboBox(cusList.toArray());
为方便起见,您可以改用 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;
}
});
您可以使用 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");
我的代码
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);
}
}
我在数组列表中有客户详细信息,我想将这些名称放在组合框中。 cusList 是 ArrayList 的名称。 newNameCombo 是组合框的名称。
不能用 ArrayList 填充 DefaultComboBoxModel。
您需要将列表转换为数组或向量并传递给构造函数。
JComboBox cmb_box = new JComboBox(cusList.toArray());
为方便起见,您可以改用 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;
}
});
您可以使用 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");