我有一个 Java 组合框和一个链接到 SQLite 数据库的项目。如果我有一个具有关联 ID 和名称的对象:
class Employee {
public String name;
public int id;
}
将这些条目放入 JComboBox 以便用户看到员工姓名的最佳方法是什么,但我可以在这样做时检索员工 ID:
selEmployee.getSelectedItem();
谢谢
第一种方法:toString()
在Employee类上实现,并使其返回名称。使您的组合框模型包含 Employee 的实例。从组合中获取选定对象时,您将获得一个 Employee 实例,因此您可以获得它的 ID。
第二种方法:如果toString()
返回名称以外的内容(例如调试信息),请执行与上述相同的操作,但另外为您的组合设置自定义单元格渲染器。此单元格渲染器必须将值转换为 Employee,并将标签的文本设置为员工的姓名。
public class EmployeeRenderer extends DefaulListCellRenderer {
@Override
public Component getListCellRendererComponent(JList<?> list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
setText(((Employee) value).getName());
return this;
}
}
将员工对象添加到 JComboBox 并覆盖员工类的 toString 方法以返回员工姓名。
Employee emp=new Employee("Name Goes here");
comboBox.addItem(emp);
comboBox.getSelectedItem().getID();
...
public Employee() {
private String name;
private int id;
public Employee(String name){
this.name=name;
}
public int getID(){
return id;
}
public String toString(){
return name;
}
}
我认为最好和最简单的方法是在使用HashMap
ResultSet 填充 JComboBox 时使用类似的方法
HashMap<Integer, Integer> IDHolder= new HashMap<>();
int a=0;
while(rs.next())
{
comboBox.addItem(rs.getString(2)); //Name Column Value
IDHolder.put(a, rs.getInt(1)); //ID Column Value
a++;
}
现在,每当您想获取任何选定组合框项目的 id 的 id 时,您只需简单地这样做
int Id = IDHolder.get(comboBox.getSelectedIndex());
您可以创建您的自定义DefaultComboBoxModel
. 在你的情况下创建你的数据向量Vector<Employee> empVec
。您还需要重写该getSelectedItem()
方法并使用getSelectedIndex()
来从向量中检索值。