2012-04-30 9 views
6

Ho una casella combinata Java e un progetto collegato a un database SQLite. Se ho un oggetto con un ID e il nome associato:Java ComboBox diverso valore per nome

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

Qual è il miglior modo di mettere queste voci in un JComboBox modo che l'utente vede il nome del dipendente ma posso prelevare l'employeeID quando ho non:

selEmployee.getSelectedItem(); 

Grazie

risposta

10

Primo metodo: implementare toString() sulla classe Employee, e farlo tornare il nome. Rendi il tuo modello di casella combinata contenente le istanze di Dipendente. Quando si ottiene l'oggetto selezionato dalla combo, si otterrà un'istanza Employee, e si può quindi ottenere il suo ID.

Secondo metodo: se toString() restituisce qualcosa di diverso dal nome (informazioni di debug, ad esempio), fare lo stesso come sopra, ma in aggiunta impostare un renderer di celle personalizzato alla propria combo. Questo renderer di celle dovrà trasmettere il valore a Employee e impostare il testo dell'etichetta sul nome del dipendente.

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

È possibile creare la vostra abitudine DefaultComboBoxModel. In che creare il vettore dei dati nel tuo caso Vector<Employee> empVec. È necessario inoltre eseguire l'override del metodo getSelectedItem() e utilizzare lo getSelectedIndex() per recuperare il valore dal vettore.

6

Aggiungere l'oggetto dipendente a JComboBox e sovrascrivere il metodo toString della classe dipendente per restituire il nome del dipendente.

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

Penso che sia meglio usare un renderer piuttosto che cambiare un ' String() 'per adattarsi alla GUI. –

3

penso che il migliore e semplice modo per fare questo sarebbe utilizzando HashMap qualcosa di simile quando si sta riempiendo la tua JComboBox con 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++; 
} 

Ora ogni volta che si desidera ottenere l'id l'id dell'elemento comboBox selezionato può essere eseguito semplicemente

int Id = IDHolder.get(comboBox.getSelectedIndex()); 
Problemi correlati