2012-01-17 30 views
18

Bir JComboBox'ta bir öğenin var olup olmadığını kontrol etmenin kolay bir yolu var mı? İşte yapmak istediklerim:JComboBox'ta bir öğenin var olup olmadığını kontrol etme?

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); 
} 

Teşekkürler!

cevap

28

DefaultComboBoxModel kullanın ve bir öğenin var olup olmadığını kontrol etmek için getIndexOf(item) numaralı telefonu arayın. Öğe mevcut değilse, bu yöntem -1 dönecektir.

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); 
} 

(. Altında-luk, indexOf Aradığınız ürünü bulmak için öğelerin listesi üzerinde döngü olmayı gerektirdiğini unutmayın)

+0

+1 Ancak, '-1' dönüş değerinin API'da not edilmediğine şaşırdım. – mre

+0

Ayrıca, addElement yönteminin üst sınıf sürümünü çağırmadan önce çoğaltmayı denetlemek için addElement yöntemini geçersiz kılan ve getIndexOf yöntemini kullanan bir DefaultComboBoxModel alt sınıfı da oluşturabilirsiniz. Bu şekilde, tekilleştirme kodunu manuel olarak çağırmanız gerekmez ve ComboBox, eklenen her öğe için otomatik olarak tüm işi yapar. – Dyndrilliac

+0

Kaynağa bakarsanız, DefaultComboBoxModel '' int getIndexOf (Object anObject) 'return' objects.indexOf (anObject) 'komutunu görürsünüz. ve 'nesneler 'Vector' dir. – 1ac0

-2

Güncelleme:

myComboBox.setSelectedIndex(-1); 
String strItem="exists"; 
myComboBox.setSelectedItem(strItem); 
if(myComboBox.getSelectedIndex()>-1){ 
    //exists 
} 
İşte bazı örnek kod bununla
+0

[JComboBox için dokümanlar] 'dan (http://docs.oracle.com/javase/7/docs/api/javax/swing/JComboBox.html#setSelectedItem (java.lang.Object)), "AnObject" ise listede değil ve açılan kutu düzenlenemez, geçerli seçimi değiştirmeyecek. " yani bu çözüm, durduğu gibi çalışmıyor. Ancak, seçilen indeksi -1 ve * olarak ayarlarsanız, * bunu yapın, o zaman işe yarayacaktır. – captainroxors

+0

@captainroxors Kodu güncelledim, size güvenmediğini test ettim haha. –

2

Kontrol:

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

veya

if(((DefaultComboBoxModel)box.getModel()).getIndexOf(toAdd) < 0) { 
    box.addItem(toAdd); 
} 
İlgili konular