2012-01-17 211 views
18

¿Hay alguna manera fácil de comprobar si un elemento ya existe en un JComboBox además de repetir el último? Esto es lo que quiero hacer:Comprobando si un elemento ya existe en un JComboBox?

Item item = ...; 
boolean exists = false; 
for (int index = 0; index < myComboBox.getItemCount() && !exists; index++) { 
    if (item.equals(myComboBox.getItemAt(index)) { 
    exists = true; 
    } 
} 
if (!exists) { 
    myComboBox.addItem(item); 
} 

Gracias!

Respuesta

28

Utilice un DefaultComboBoxModel y llame al getIndexOf(item) para verificar si ya existe un artículo. Este método devolverá -1 si el artículo no existe. Aquí hay un código de ejemplo:

DefaultComboBoxModel model = new DefaultComboBoxModel(new String[] {"foo", "bar"}); 
JComboBox box = new JComboBox(model); 

String toAdd = "baz"; 
//does it exist? 
if(model.getIndexOf(toAdd) == -1) { 
    model.addElement(toAdd); 
} 

(. Tenga en cuenta que bajo el capó, indexOf hace un bucle sobre la lista de elementos para encontrar el artículo que busca)

+0

+1, pero me sorprende que el valor de retorno '-1' no se indique en la API. – mre

+0

También podría crear una subclase DefaultComboBoxModel que anule el método addElement y use el método getIndexOf para verificar la duplicación antes de llamar a la versión de superclase de addElement. De esta manera, no tiene que invocar el código de deduplicación manualmente, y el ComboBox hará todo el trabajo automáticamente para cada elemento agregado. – Dyndrilliac

+0

@mre si observas el origen 'DefaultComboBoxModel' ves que' int getIndexOf (Object anObject) 'devuelve' objects.indexOf (anObject) '. y 'objects' es' Vector'. – 1ac0

-2

Actualización:

myComboBox.setSelectedIndex(-1); 
String strItem="exists"; 
myComboBox.setSelectedItem(strItem); 
if(myComboBox.getSelectedIndex()>-1){ 
    //exists 
} 
+0

De [los documentos para JComboBox] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JComboBox.html#setSelectedItem (java.lang.Object)), "If' anObject' no está en la lista y el cuadro combinado no es editable, no cambiará la selección actual ". es decir, esta solución no funciona tal como está. Sin embargo, si configura el índice seleccionado a -1 y * entonces * haga esto, entonces funcionará. – captainroxors

+0

@captainroxors, actualicé el código, no probé, confío en ti jaja. –

2

Comprobar con esto:

if(((DefaultComboBoxModel)box.getModel()).getIndexOf(toAdd) == -1) { 
    box.addItem(toAdd); 
} 

o

if(((DefaultComboBoxModel)box.getModel()).getIndexOf(toAdd) < 0) { 
    box.addItem(toAdd); 
} 
Cuestiones relacionadas