texto poner metodos llenar initialize hacer agregar java swing generics jcombobox java-7

poner - llenar jcombobox java



¿Por qué no getSelectedItem() en JComboBox genérico? (2)

JCombobox en Java 7 se ha actualizado para usar genéricos: siempre pensé que era un poco de supervisión que todavía no lo estaba, así que me complació ver este cambio.

Sin embargo, al intentar usar JCombobox de esta manera, me di cuenta de que los métodos que esperaba utilizar estos tipos genéricos aún solo devuelven Object.

¿Por qué demonios es esto? Me parece una decisión de diseño tonta. Me doy cuenta de que el ListModel subyacente tiene un método getElementAt() genérico, así que lo usaré en su lugar, pero es una forma indirecta de hacer algo que parece haber sido modificado en JComboBox.


Aquí hay una versión segura para tipos:

public static <T> T getSelectedItem(JComboBox<T> comboBox) { int index = comboBox.getSelectedIndex(); return comboBox.getItemAt(index); }


Supongo que te refieres a getSelectedItem() ?

La razón es que si el cuadro combinado es editable, el elemento seleccionado no está necesariamente contenido en el modelo de respaldo y no está restringido al tipo genérico. Por ejemplo, si tiene un JComboBox<Integer> editable con el modelo [1, 2, 3], puede escribir "foo" en el componente y getSelectedItem() devolverá el String "foo" y no un objeto de tipo Integer.

Si el cuadro combinado no es editable, siempre puede diferir a cb.getItemAt(cb.getSelectedIndex()) para lograr seguridad de tipo. Si no se selecciona nada, se devolverá null , que es el mismo comportamiento que getSelectedItem() .