我的数据库中有一个表,我现在有一些名称和相应的代码,现在我想要在 jcombobox 中显示名称,但是当我从该 jcombobox 中选择任何名称时,应该返回相应的代码。
桌子就像
名称代码
a 1
b 2
c 3
为什么不使用列表单元渲染器将代码和名称包装在对象中,只渲染ame,但是您可以从 .getSelectedItem 获取返回的对象并从中提取代码
您需要将代码存储在例如一个ArrayList
并使用组合框的选择索引检索当前代码。
private JComboBox comboBox;
private List<Integer> codes;
private void createUI() {
comboBox = new JComboBox();
codes = new ArrayList<Integer>();
addItem("one", 42);
addItem("two", 127);
comboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(comboBox.getSelectedIndex());
System.out.println(codes.get(comboBox.getSelectedIndex()));
}
});
add(comboBox);
}
private void addItem(String name, int code) {
comboBox.addItem(name);
codes.add(code);
}
您可以创建一个包装类 - 我们称之为TableElement
:
class TableElement {
public String name;
public double value;
public TableElement(String n, double v) {
name = n;
value = v;
}
// this is what is shown in the JComboBox
public String toString() {
return name;
}
}
然后你可以创建一个包含所有表格元素的数组并JComboBox
像这样创建
Vector<TableElement> vect = new Vector<TableElement>();
for (/* all your table elements */)
vect.add(new TableElement(elementName, elementValue);
JComboBox comboBox = new JComboBox(vect);
并像这样读出来:
TableElement selected = (TableElement)comboBox.getSelectedItem();
System.out.println("name = " +selected.name + ",value = " + selected.value);
看看
ItemListener(触发事件总是两次)