刷新 JFrame 中的 JList

Posted

技术标签:

【中文标题】刷新 JFrame 中的 JList【英文标题】:Refresh JList in a JFrame 【发布时间】:2011-05-14 20:13:40 【问题描述】:

我有一个 JList,它显示来自向量的信息。然后,用户可以从该向量中添加和删除信息。当从向量中添加/删除项目时,是否可以刷新我的 JFrame 中的 JList?目前我正在做..

 list = new JList(names);
 jframe.add(new JScrollPane(list), BorderLayout.CENTER);

但这不会将 JList 刷新为任何新内容。我已经检查并且我的矢量内容等确实发生了变化,但列表没有刷新。为什么?我该如何解决?

【问题讨论】:

你使用什么类作为 JList 的模型? ListModel 的工作是在更新时通知它,以便 JList 在其基础数据发生更改时可以重新绘制自己。 迈克,如果你把它放在答案中,我会投赞成票。 【参考方案1】:

您不应该更新 Vector。应直接对 ListModel 进行更改,然后表格将自动重新绘制。

如果您因为 Vector 的更改而决定重新创建 ListModel,那么您可以通过以下方式更新列表:

list.setModel( theNewModel );

编辑:忘记 Vector 并将数据直接加载到 DefaultListModel:

DefaultListModel model = new DefaultListModel();
model.addElement( "one" );
model.addElement( "two" );
JList list = new JList( model );

现在,当您需要更改数据时,您可以直接使用 addElement()、removeElement() 或 set() 方法更新模型。列表将自动重新绘制。

【讨论】:

【参考方案2】:

修改 Vector 后,在 Jlist 上调用 updateUI

【讨论】:

不清楚为什么“你不应该”的回答是公认的答案。当您有用户定义的 List Element 和 ListCellRenderer 并且需要针对 List Element 的某些静音属性调整视图时,此方法有效。【参考方案3】:

我想我找到了 Jlist 图形“刷新”的解决方案。尝试在 Jlist 保存的模型的每个添加或删除元素之后调用此方法。

Jlist_name.ensureIndexIsVisible(model_name.getSize());

【讨论】:

这是一个绝妙的解决方案。帮助了我。 迟到的评论,但这是一个很棒的答案!调用 JList.updateGui() 将触发某种重绘,在某些情况下会干扰布局。该解决方案更好:)【参考方案4】:

你可以在每次向量变化时使用 list.setListData(vector)

【讨论】:

在您的示例中vector 是什么?

以上是关于刷新 JFrame 中的 JList的主要内容,如果未能解决你的问题,请参考以下文章

Java中Swing组件中的JTextArea,JList控件中的滚动条问题?帮忙解决!

在JFrame中显示数组

在另一个 JFrame 中使用 JButton 刷新 JTable?

java将数组刷新到jList中

在类之间传递值

监听JList列表项的单击事件