从Java中的组合框中删除所有项目

时间:2012-09-03 13:59:55

标签: java swing jcombobox

我需要从组合框中删除所有项目

    int itemCount = combo.getItemCount();

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

此代码将删除除最后一项之外的所有项目。它给出了NullPointerException。 如何解决?

9 个答案:

答案 0 :(得分:26)

问题中的代码通常会起作用。但是,它看起来像一个线程问题。另一个主题可能是搞乱这些项目。

但是,我认为你应该更好地使用removeAllItems();方法:

combo.removeAllItems();

答案 1 :(得分:3)

答案 2 :(得分:2)

在第二行:

combo.removeItemAt(0);

我认为应该是0而不是i

以相反的顺序执行:

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

但在我的情况下combo.removeAllItems()工作正常

答案 3 :(得分:2)

您可以使用

this.combo.removeAllItems();

删除JComboBox中的所有项目。

答案 4 :(得分:1)

使用.removeAllItems()方法从组合框中删除所有项目。

答案 5 :(得分:0)

它与另一个线程相关的假设并不总是正确的。它可能是导致问题的线程本身。

可能会发生此异常,因为在删除组合项时会触发事件,而在此事件处理方法中,您仍然会引用组合框项目。

例如,当你在代码中的某个地方(除了在actionPeformed()中)删除combo.removeItem(0)或removeAllItems()的组合框中的最后一项时,仍然会触发/执行事件actionPerformed。但是,actionPerformed()方法通常包含对用户操作做出反应的代码(用户在组合框上的某处单击)。因此,当最后一项被删除时,组合框中没有其他项目,并且对actionPerformed()中的项目或索引的任何引用都将导致异常。

解决方法是将代码从actionPerformed()移动到例如mouseClicked()或其他事件处理程序取决于你想要做什么。

答案 6 :(得分:0)

removeAllItems()它确实删除了所有内容但是在将数据添加到组合框之后它将不会显示在那里,nullPointException将显示

答案 7 :(得分:0)

使用此选项可删除组合框中的所有元素:

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

答案 8 :(得分:0)

通常会发生这种情况,因为您有一个与JComboBox相关联的事件。如果您在JComboBox中有控制项来执行操作,则会解决此问题,例如:

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