如何在Java中清空JList?

21

我有一个GUI中的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 中没有任何内容。
4个回答

29

不应该重新初始化整个JList小部件来删除其中的一些项目。相反,你应该操作列表模型,因为对其所做的更改会“自动”同步回UI。假设你确实使用DefaultListModel,那么这就足以实现你的“全部清除”功能:

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

8

有一些问题,首先是你的示例代码存在很多编译问题,所以我希望那不是你的实际代码。

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 listmodel = (DefaultListModel) JList1.getModel(); evt.getSource() == jButtonClear { listmodel.removeAllElements(); - Pan24112012
我已经更改了条件(以便清除现在调用removeAll),否则它将添加一个新元素。我窃取了你的代码,并没有仔细修复它。我不确定这是否是与另一个操作事件共享的代码。如果不是,请删除addElement行。 - MadProgrammer
是的,这是一个与“添加”按钮共享的代码,我不能在这里放置代码,因为我是新来的。但是在“添加”按钮的代码末尾有以下内容:jList1.repaint(); jPanelVizualisationOptions1.update(); currentPanel.refresh(); - Pan24112012

3

试一下这个:

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

1

try this one:

DefaultListModel listmodel=new DefaultListModel();

JList.setModel(listmodel);

3
嗨,Nathanzkie。欢迎来到 Stack Overflow 并感谢您的贡献!虽然此代码可能回答了问题,但提供关于为什么和/或如何回答问题的额外上下文可以提高其长期价值。回答提示。祝好。 - Elletlar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接