如何在Java中清除JList?

我在gui中有一个jList,我可以使用Add按钮添加一些数据。 我要添加另一个名为Clear的按钮,它将清除所有元素。 我试过这个:

private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) { DefaultListModel listmodel=new DefaultListModel(); jList1 = new JList(listmodel); if(evt.getSource()==jButtonClear) JList.setListData(new String[0]; else listmodel.removeAllElements(); } 

当我点击Add按钮时,这将添加元素。

当我单击“清除”按钮时,删除元素。

但是当我重新点击Add按钮时, jList1没有任何jList1

您不应该重新初始化整个JList小部件,只是为了从中删除一些项目。 相反,您应该操纵列表模型,因为对它的更改会“自动”同步回UI。 假设您确实在使用DefaultListModel ,这足以实现“全部清除”function:

 private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) { if(evt.getSource()==jButtonClear) { DefaultListModel listModel = (DefaultListModel) jList1.getModel(); listModel.removeAllElements(); } } 

有很多问题,首先是你的例子充满了编译问题,所以我希望这不是你的实际代码。

JList没有名为setListData静态方法。 我认为你的意思是jList1

每次单击“清除”按钮,都会创建新的模型和组件……

 private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) { // ?? DefaultListModel listmodel=new DefaultListModel(); jList1 = new JList(listmodel); // ?? if(evt.getSource()==jButtonClear) jList1.setListData(new String[0]); else listmodel.removeAllElements(); } 

您已成功解除引用jList1所指向的内容,因此每当您尝试与其进行交互时,您就不再与屏幕上的组件进行交互。

另一个问题是你向setListData方法提供一个空数组,这基本上就像是说“请不要在我的列表中添加任何东西”

尝试这样的事情;

 private void jButtonClearActionPerfomed(java.awt.event.ActionEvent evt) { DefaultListModel listmodel = (DefaultListModel)jList1.getModel(); if(evt.getSource()==jButtonClear) { listmodel.removeAllElements(); } else { listModel.addElement(new String[]{"Hello"}); } } 
 DefaultListModel model=new DefaultListModel(); model.clear(); jList1.setModel(model); 

尝试这个