【问题标题】:Clearing a JList清除 JList
【发布时间】:2014-11-01 01:02:39
【问题描述】:

所以我有一个 JList,我在调用方法时添加数据。我希望能够刷新 JList 中的数据,但每次我尝试从 JList 中删除时,新数据都会附加到旧数据中。所以基本上当按钮被按下时,它会调用该方法并更新 JList(清除旧数据并读入新数据)。

我尝试从模型中清除数据,当我请求大小时,它说它是 0,但它仍然被附加。我也尝试从列表本身中删除。让我发疯,任何帮助将不胜感激。这基本上就是我正在做的事情,“新数据”在每次方法调用时都会发生变化。

DefaultListModel model = new DefaultListModel();
JList list = new JList(model);

public void method(){
 if(model.size() > 0){
 model.removeAllElements();
 model.clear();
 list.removeAll();
 }

model.addElement("new Data");
model.addElement("new Data");

}

【问题讨论】:

  • 请提供您的完整代码;你在这里写的应该有效。有些事情你正在做而我们没有看到。

标签: java swing jlist defaultlistmodel


【解决方案1】:

首先,不要调用list.removeAll,虽然它不太可能做任何事情,但这样弄乱组件是不明智的。

最简单的解决方案就是替换JListListModel...

list.setModel(new DefaultListModel());

或者,在你的情况下,类似...

model = new DefaultListModel();
list.setModel(model);
model.addElement("new Data");

如果这不起作用,那么您可能正在隐藏您的变量,在这种情况下,请考虑提供一个 runnable example 来证明您的问题。这将减少混乱并获得更好的响应

【讨论】:

  • 非常感谢您的回复。当我刚刚添加第一个解决方案时,我的 JList 已清除,但是当我使用您提供的第二个代码块时,数据与旧数据混合在一起。
  • 真的没必要新建一个模型。在现有的代码上调用 clear 应该就足够了,但是 OP 的代码中存在一些未提供的内容。
  • 我提供的代码几乎是相同的减去添加数据部分,在这种情况下这不是必需的。还有其他想法吗?
  • @alterfox 我同意,但我正在研究“最简单”的想法。更换模型应该保证新旧模型之间没有相关性。它还打折了DefaultListModel 的使用,因为并非所有ListModels 都有clear 方法。
  • 如果存在超过 999 个项目的模式(错误或功能,这里有几次......),删除会导致性能问题,我将创建一个新的 DefaultListModel 而不是删除所有项目跨度>
猜你喜欢
  • 2014-07-28
  • 2011-10-21
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 2016-07-07
相关资源
最近更新 更多