刷新 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控件中的滚动条问题?帮忙解决!