2012-04-30 12 views
6

Mam pole kombi Java i projekt połączony z bazą danych SQLite. Jeśli mam obiekt z towarzyszącym identyfikatora i nazwy:Java ComboBox Różne wartości Nazwa

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

Jaki jest najlepszy sposób na wprowadzenie tych wpisów w JComboBox tak, że użytkownik widzi nazwisko pracownika, ale mogę retreive z IDPracownika kiedy temat:

selEmployee.getSelectedItem(); 

Dzięki

Odpowiedz

10

Pierwsza metoda: implementacja toString() na klasie pracownika i zwrócenie jej nazwy. Spraw, aby twój model pola kombi zawierał instancje pracownika. Po pobraniu wybranego obiektu z kombinacji otrzymasz instancję Employee, dzięki czemu otrzymasz jego identyfikator.

Druga metoda: jeśli toString() zwraca coś innego niż nazwa (na przykład informacje dotyczące debugowania), wykonaj to samo, co powyżej, ale dodatkowo ustaw niestandardowy mechanizm renderujący komórki w swoim combo. Ten renderer komórek będzie musiał rzucić wartość dla pracownika i ustawić tekst etykiety na nazwisko pracownika.

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

można tworzyć niestandardowe DefaultComboBoxModel. W ten sposób stwórz wektor swoich danych w twoim przypadku Vector<Employee> empVec. Musisz dodatkowo zastąpić metodę getSelectedItem() i użyć wartości getSelectedIndex(), aby pobrać wartość z wektora.

6

Dodaj obiekt pracownika do JComboBox i nadpisz metodę toString klasy pracownika, aby zwrócić nazwisko pracownika.

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

Czuję, że lepiej jest użyć renderer zamiast zmienić 'na String() ', aby dopasować się do GUI. –

3

myślę Najlepszy i prosty sposobem na to byłoby za pomocą HashMap coś takiego, gdy wypełniają swoje JComboBox z 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++; 
} 

Teraz, gdy chcesz uzyskać identyfikator dowolny wybrany identyfikator elementu comboBox można to zrobić po prostu

int Id = IDHolder.get(comboBox.getSelectedIndex()); 
Powiązane problemy