2012-04-30 23 views
6

Tengo un cuadro combinado de Java y un proyecto vinculado a una base de datos SQLite. Si tengo un objeto con un ID y nombre asociado:Java ComboBox Valor diferente al nombre

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

cuál es la mejor manera de poner estas entradas en un JComboBox para que el usuario ve el nombre del empleado, pero puedo retreive la employeeID cuando Qué:

selEmployee.getSelectedItem(); 

Gracias

Respuesta

10

Primer método: aplicar toString() en la clase Employee, y hacer que se devuelva el nombre. Haga que su modelo de cuadro combinado contenga instancias de empleado. Al obtener el objeto seleccionado del combo, obtendrá una instancia de Empleado y podrá obtener su ID.

Segundo método: si toString() devuelve algo que no sea el nombre (información de depuración, por ejemplo), haga lo mismo que arriba, pero además establezca un procesador de celdas personalizado en su combo. Este procesador de celdas tendrá que emitir el valor a Employee, y establecer el texto de la etiqueta con el nombre del empleado.

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

Usted puede crear su costumbre DefaultComboBoxModel. En eso crea el vector de tus datos en tu caso Vector<Employee> empVec. También debe sobrescribir el método getSelectedItem() y usar getSelectedIndex() para recuperar el valor del vector.

6

Agregue el objeto empleado a JComboBox y sobrescriba el método toString de la clase de empleado para devolver el nombre del empleado.

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

Creo que es mejor usar un renderer en lugar de cambiar un 'a String() 'para adaptarse a la GUI. –

3

creo que el mejor y simple manera para hacer esto sería usar HashMap algo como esto cuando se está llenando su 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++; 
} 

Ahora cada vez que desee obtener el ID de cualquier identificador de elemento de comboBox seleccionado puede hacerlo simplemente

int Id = IDHolder.get(comboBox.getSelectedIndex()); 
Cuestiones relacionadas