2012-01-17 117 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); 
} 
相关问题