2012-04-30 70 views
6

我有一個Java組合框和一個鏈接到SQLite數據庫的項目。如果我有一個對象,具有相關聯的ID和名稱:Java組合框不同的名稱

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

什麼將這些項目分成的JComboBox的最佳方式,使用戶看到的員工的名字,但我可以retreive的僱員,當我更多信息:

selEmployee.getSelectedItem(); 

感謝

回答

10

第一種方法:執行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; 
    } 
} 
0

您可以創建自定義DefaultComboBoxModel。在這種情況下,在您的案例中創建數據向量Vector<Employee> empVec。您需要額外覆蓋getSelectedItem()方法並使用getSelectedIndex()從矢量中檢索值。

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; 
    } 
} 
+0

我覺得最好是使用渲染器而不是更改'到String()'來適應GUI。 –

3

我認爲當你與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());