2012-01-17 287 views
18

有沒有簡單的方法來檢查一個項目是否已經存在於JComboBox中,除了迭代後者?這是我想要做的:檢查一個項目是否已經存在於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); 
} 

謝謝!

回答

28

使用DefaultComboBoxModel並致電getIndexOf(item)檢查項目是否已經存在。如果該項不存在,此方法將返回-1。下面是一些示例代碼:

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

(注意,在引擎罩,indexOf確實遍歷的項目列表中找到你正在尋找的項目)

+0

+1,但我很驚訝,在API中沒有注意到'-1'返回值。 – mre 2012-01-17 17:52:35

+0

您也可以創建一個DefaultComboBoxModel子類來覆蓋addElement方法,並使用getIndexOf方法在調用addElement的超類版本之前檢查是否存在重複。這樣,您不必手動調用重複數據刪除代碼,而且ComboBox將自動爲添加到其中的每個項目執行所有工作。 – Dyndrilliac 2014-03-01 17:39:10

+0

@mre如果你看看DefaultComboBoxModel的源代碼,你會看到'int getIndexOf(Object anObject)'return'object.indexOf(anObject)'。而'objects'是'Vector'。 – 1ac0 2014-11-21 16:12:31

-2

更新:

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

從[JComboBox的文檔](http://docs.oracle.com/javase/7/docs/api/javax/swing/JComboBox.html#setSelectedItem(java.lang.Object)),「如果'anObject'不在列表中,組合框不可編輯,它不會改變當前選擇。「即這種解決方案不能像現在這樣工作。但是,如果您將所選索引設置爲-1,然後*執行此操作,那麼它將起作用。 – captainroxors 2014-06-16 16:55:14

+0

@captainroxors我更新了代碼,我沒有測試我對你的信任哈哈。 – 2015-09-08 18:17:07

2

檢查與此:

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

if(((DefaultComboBoxModel)box.getModel()).getIndexOf(toAdd) < 0) { 
    box.addItem(toAdd); 
} 
相關問題