2012-09-03 40 views
5

tôi cần phải loại bỏ tất cả các mục từ combo boxLoại bỏ tất cả các mục từ một combo box trong Java

int itemCount = combo.getItemCount(); 

    for(int i=0;i<itemCount;i++){ 
     combo.removeItemAt(0); 
    } 

Mã này sẽ loại bỏ tất cả các mục trừ người cuối cùng. Nó cho một NullPointerException. Cách sửa lỗi đó?

+1

Khi tôi đồng ý với câu trả lời để sử dụng phương pháp tích hợp để làm điều này, mã này hoạt động tốt khi tôi tự chạy nó .Bạn có chắc chắn rằng vấn đề của bạn không phải ở nơi khác? – Thor84no

+0

vâng, tôi đã sử dụng phương thức removeAllItems(). Nó đã xóa tất cả các mục. Nhưng vẫn cho ngoại lệ. – chathura

+1

Bạn có thể gặp vấn đề về luồng. Có các Chủ đề khác truy cập vào combobox (và chỉnh sửa nó) không? – brimborium

Trả lời

24

Mã trong câu hỏi thường hoạt động. Tuy nhiên, nó trông giống như một vấn đề luồng. Chủ đề khác có thể gây rối với các mục.

Tuy nhiên, tôi sugeest bạn nên sử dụng tốt hơn các phương pháp removeAllItems();:

combo.removeAllItems(); 
+0

+1 vì đó là giải pháp tốt hơn. Mặc dù nó không giải thích tại sao OP nhận được 'NullPointerException' ...;) – brimborium

+2

Mã trong câu hỏi thường sẽ hoạt động. Tuy nhiên, nó trông giống như một vấn đề luồng. Chủ đề khác có thể gây rối với các mục. –

+0

Đừng giải thích điều đó với tôi, giải thích cho OP (nghĩa là đưa nó vào câu trả lời của bạn ^^). – brimborium

1

sử dụng các phương thức .removeAllItems() để xóa tất cả các mục khỏi hộp tổ hợp.

+0

@RomanC tại sao không hữu ích khi sử dụng removeAll ... thingy? –

0

Giả định rằng nó liên quan đến một luồng khác không phải lúc nào cũng đúng. Nó có thể là chủ đề chính nó gây ra vấn đề.

Ngoại lệ này có thể xảy ra do sự kiện được kích hoạt khi mục kết hợp bị xóa và trong phương thức xử lý sự kiện này, bạn vẫn tham chiếu đến mục combobox.

Ví dụ khi bạn xóa một nơi nào đó (không phải trong actionPeformed()) trong mã của bạn mục cuối cùng từ hộp tổ hợp với combo.removeItemAt (0) hoặc removeAllItems() thì sự kiện actionPerformed sẽ được kích hoạt. Nhưng rất thường là phương thức actionPerformed() chứa mã để phản ứng trên các hành động của người dùng (người dùng đã nhấp vào đâu đó trên combobox). Vì vậy, khi mục cuối cùng đã bị xóa không có mục nào trong combobox và bất kỳ tham chiếu đến một mục hoặc chỉ mục trong actionPerformed() sẽ gây ra một ngoại lệ.

Giải pháp với điều này là di chuyển mã từ actionPerformed() sang ví dụ: mouseClicked() hoặc trình xử lý sự kiện khác tùy thuộc vào những gì bạn muốn làm.

0

removeAllItems() nó loại bỏ tất cả mọi thứ nhưng sau khi thêm dữ liệu vào combo box nó sẽ không hiển thị ở đó, nullPointException sẽ show

0

Sử dụng này để loại bỏ tất cả các yếu tố từ combo box:

DefaultComboBoxModel model = (DefaultComboBoxModel) ComboBox.getModel(); 
model.removeAllElements(); 
1

Trong dòng thứ hai:

combo.removeItemAt(0);

Tôi nghĩ thay vì 0, nó phải là i.

làm điều đó theo thứ tự ngược như:

for(int i=combo.getItemCount()-1;i>=0;i--){ 
    combo.removeItemAt(i); 
} 

Nhưng trong trường hợp của tôi combo.removeAllItems() hoạt động tốt

0

Thông thường nó xảy ra bởi vì bạn có một sự kiện liên quan đến JComboBox. Nó được giải quyết nếu bạn có mục kiểm soát trong JComboBox để hành động, ví dụ:

jComboBoxExample.addActionListener (new ActionListener() { 
    public void actionPerformed (ActionEvent e) { 
    do_run(); 
    } 
}); 



public void do_run() { 
    int n=jComboBoxPerfilDocumentos.getItemCount(); <--THIS IS THE SOLUTION 
    if (n> 0) { 
    String x = jComboBoxPerfilDocumentos.getSelectedItem(). ToString(); 
    } 
} 
Các vấn đề liên quan