2012-11-28 73 views
12

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

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

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

当我点击清除按钮时,这个删除元素。

但添加按钮,当我再次点击,有没有在jList1

回答

18

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

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

有问题的数量,首先得到你的例子是完全编译的问题,所以我希望这不是你的实际代码。

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"}); 
    } 
} 
+0

确定与您的修改copmile错误,现在当我点击清除按钮,它增加了一些新的数据,我不知道它来自...但我尝试这一点,它清除所有数据,但当我点击添加按钮它增加了新的数据,但它清除前保留旧数据:代码: DefaultListModel listmodel =(DefaultListModel)JList1.getModel(); evt.getSource()== jButtonClear {listmodel.removeAllElements(); – Pan24112012

+0

我已经改变了条件(所以清除现在调用'removeAll'),否则它会添加一个新的元素。我偷了你的代码,并没有小心修复它。我不确定这是否与其他操作事件共享代码。如果没有,删除'addElement'行 – MadProgrammer

+0

是的这是一个共享代码与添加按钮,我不能把代码放在这里,因为我是新来的,但这里是什么是在添加按钮的代码的末尾: jList1.repaint(); \t jPanelVizualisationOptions1.update(); \t currentPanel.refresh(); – Pan24112012

1
DefaultListModel model=new DefaultListModel(); 
     model.clear(); 
    jList1.setModel(model); 

试试这个