6

我有一个 Java 组合框和一个链接到 SQLite 数据库的项目。如果我有一个具有关联 ID 和名称的对象:

class Employee {
    public String name;
    public int id;
}

将这些条目放入 JComboBox 以便用户看到员工姓名的最佳方法是什么,但我可以在这样做时检索员工 ID:

selEmployee.getSelectedItem();

谢谢

4

4 回答 4

10

第一种方法: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;
    }
}
于 2012-04-30T17:39:10.793 回答
6

将员工对象添加到 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;
  }
}
于 2012-04-30T17:38:06.603 回答
3

我认为最好和最简单的方法是在使用HashMapResultSet 填充 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());
于 2014-10-10T13:40:49.357 回答
0

您可以创建您的自定义DefaultComboBoxModel. 在你的情况下创建你的数据向量Vector<Employee> empVec。您还需要重写该getSelectedItem()方法并使用getSelectedIndex()来从向量中检索值。

于 2012-04-30T17:37:12.890 回答