2012-01-17 28 views
18

Có cách nào dễ dàng để kiểm tra xem một mục đã tồn tại trong JComboBox ngoài việc lặp lại thông qua sau? Đây là những gì tôi muốn làm:Kiểm tra xem một mục đã tồn tại trong JComboBox chưa?

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

Cảm ơn!

Trả lời

28

Sử dụng DefaultComboBoxModel và gọi getIndexOf(item) để kiểm tra xem một mục đã tồn tại chưa. Phương thức này sẽ trả lại -1 nếu mục không tồn tại. Dưới đây là một số mẫu mã:

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

(. Lưu ý rằng trong-the-hood, indexOf không vòng lặp trong danh sách các mục để tìm các mục mà bạn đang tìm kiếm)

+0

+1, Nhưng tôi ngạc nhiên rằng giá trị trả về '-1' không được ghi chú trong API. – mre

+0

Bạn cũng có thể tạo một lớp con DefaultComboBoxModel ghi đè phương thức addElement và sử dụng phương thức getIndexOf để kiểm tra trùng lặp trước khi gọi phiên bản superclass của addElement. Bằng cách này bạn không cần phải gọi mã de-duplication bằng tay, và ComboBox sẽ tự động thực hiện tất cả công việc cho mỗi mục được thêm vào nó. – Dyndrilliac

+0

@mre nếu bạn nhìn vào nguồn 'DefaultComboBoxModel' bạn thấy' int getIndexOf (Object anObject) 'return' objects.indexOf (anObject) '. và 'đối tượng' là' Vector'. – 1ac0

-2

Cập nhật:

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

Từ [tài liệu cho JComboBox] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JComboBox.html#setSelectedItem (java.lang.Object)), "Nếu' anObject' không có trong danh sách và hộp tổ hợp không thể chỉnh sửa, nó sẽ không thay đổi lựa chọn hiện tại. " tức là giải pháp này không hoạt động như nó đứng. Tuy nhiên, nếu bạn đặt chỉ mục đã chọn thành -1 và * thì * làm điều này, sau đó nó sẽ hoạt động. – captainroxors

+0

@captainroxors i cập nhật mã, tôi đã không kiểm tra tôi tin tưởng vào bạn haha. –

2

Kiểm tra với điều này:

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

hoặc

if(((DefaultComboBoxModel)box.getModel()).getIndexOf(toAdd) < 0) { 
    box.addItem(toAdd); 
} 
Các vấn đề liên quan