2012-04-30 36 views
6

Tôi có một hộp combo Java và một dự án được liên kết với một cơ sở dữ liệu SQLite. Nếu tôi đã có một đối tượng với một ID liên quan và tên:Java ComboBox Giá trị khác nhau cho tên

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

gì là cách tốt nhất đưa những mục thành một JComboBox để người dùng thấy tên của người lao động nhưng tôi có thể truy xuất các EmployeeID khi tôi làm:

selEmployee.getSelectedItem(); 

Cảm ơn

Trả lời

10

Phương pháp đầu tiên: triển khai toString() trên lớp nhân viên và đặt lại tên. Làm cho mô hình hộp combo của bạn chứa các cá thể của Employee. Khi nhận được đối tượng đã chọn từ combo, bạn sẽ nhận được một cá thể Employee, và do đó bạn có thể nhận được ID của nó.

phương pháp thứ hai: nếu toString() lợi nhuận một cái gì đó khác hơn là tên (thông tin gỡ lỗi, ví dụ), Thực hiện tương tự như trên, nhưng thiết lập thêm một renderer tế bào tùy chỉnh để combo của bạn. Trình kết xuất ô này sẽ phải truyền giá trị cho Nhân viên và đặt văn bản của nhãn thành tên của nhân viên.

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

bạn có thể tạo tùy chỉnh của bạn DefaultComboBoxModel. Trong đó tạo ra các vector dữ liệu của bạn trong trường hợp của bạn Vector<Employee> empVec. Bạn cần phải ghi đè thêm phương pháp getSelectedItem() và sử dụng getSelectedIndex() để truy xuất giá trị từ vectơ.

6

Thêm đối tượng nhân viên vào JComboBox và ghi đè phương thức toString của lớp nhân viên để trả về Tên nhân viên.

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

Tôi cảm thấy tốt hơn khi sử dụng trình kết xuất thay vì thay đổi 'thành String() 'để phù hợp với GUI. –

3

Tôi nghĩ rằng tốt nhất và đơn giản cách để làm điều này sẽ được sử dụng HashMap một cái gì đó như thế này khi bạn đang làm đầy JComboBox của bạn với ResultSet

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

Bây giờ bất cứ khi nào bạn muốn nhận được id của bất kỳ id của mục comboBox nào đã chọn mà bạn có thể thực hiện bằng cách chỉ đơn giản là

int Id = IDHolder.get(comboBox.getSelectedIndex()); 
Các vấn đề liên quan