java - obtener - Añadiendo elementos a un JComboBox
jcombobox java swing (4)
Uso un cuadro combinado en el panel y, como sé, solo podemos agregar elementos con el texto
comboBox.addItem(''item text'');
Pero algunas veces necesito usar algún valor del elemento y el texto del elemento como en html select:
<select><option value="item_value">Item Text</option></select>
¿Hay alguna forma de establecer tanto el valor como el título en el elemento del cuadro combinado?
Por ahora uso un hash para resolver este problema.
Ajustar los valores en una clase y anular el método toString()
.
class ComboItem
{
private String key;
private String value;
public ComboItem(String key, String value)
{
this.key = key;
this.value = value;
}
@Override
public String toString()
{
return key;
}
public String getKey()
{
return key;
}
public String getValue()
{
return value;
}
}
Agregue el ComboItem a su comboBox.
comboBox.addItem(new ComboItem("Visible String 1", "Value 1"));
comboBox.addItem(new ComboItem("Visible String 2", "Value 2"));
comboBox.addItem(new ComboItem("Visible String 3", "Value 3"));
Cada vez que obtenga el elemento seleccionado.
Object item = comboBox.getSelectedItem();
String value = ((ComboItem)item).getValue();
Método llamada setSelectedIndex("item_value");
no funciona porque setSelectedIndex
usa un índice secuencial.
Puedes usar cualquier Objeto como un elemento. En ese objeto puedes tener varios campos que necesites. En su caso el campo de valor. Debe anular el método toString () para representar el texto. En su caso el "texto del elemento". Vea el ejemplo:
public class AnyObject {
private String value;
private String text;
public AnyObject(String value, String text) {
this.value = value;
this.text = text;
}
...
@Override
public String toString() {
return text;
}
}
comboBox.addItem(new AnyObject("item_value", "item text"));
addItem (Objeto) toma un objeto. El renderizador de JComboBox predeterminado llama aString () en ese objeto y eso es lo que muestra como la etiqueta.
Por lo tanto, no pase un String para addItem (). Pase un objeto cuyo método toString () devuelva la etiqueta que desea. El objeto puede contener cualquier número de otros campos de datos también.
Intenta pasar esto a tu combobox y ver cómo se procesa. getSelectedItem () devolverá el objeto, que puede volver a convertir en Widget para obtener el valor.
public final class Widget {
private final int value;
private final String label;
public Widget(int value, String label) {
this.value = value;
this.label = label;
}
public int getValue() {
return this.value;
}
public String toString() {
return this.label;
}
}