我有一個Java組合框和一個鏈接到SQLite數據庫的項目。如果我有一個對象,具有相關聯的ID和名稱:Java組合框不同的名稱
class Employee {
public String name;
public int id;
}
什麼將這些項目分成的JComboBox的最佳方式,使用戶看到的員工的名字,但我可以retreive的僱員,當我更多信息:
selEmployee.getSelectedItem();
感謝
我有一個Java組合框和一個鏈接到SQLite數據庫的項目。如果我有一個對象,具有相關聯的ID和名稱:Java組合框不同的名稱
class Employee {
public String name;
public int id;
}
什麼將這些項目分成的JComboBox的最佳方式,使用戶看到的員工的名字,但我可以retreive的僱員,當我更多信息:
selEmployee.getSelectedItem();
感謝
第一種方法:執行Employee類toString()
,並使其返回名稱。讓你的組合框模型包含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;
}
}
您可以創建自定義DefaultComboBoxModel
。在這種情況下,在您的案例中創建數據向量Vector<Employee> empVec
。您需要額外覆蓋getSelectedItem()
方法並使用getSelectedIndex()
從矢量中檢索值。
將員工對象添加到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;
}
}
我認爲當你與ResultSet中盡顯你的JComboBox,只要你想得到的ID 最好不過的了辦法做到這一點將使用HashMap
這樣的事情現在
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您可以通過簡單的方式做到這一點
int Id = IDHolder.get(comboBox.getSelectedIndex());
我覺得最好是使用渲染器而不是更改'到String()'來適應GUI。 –