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

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

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

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

【问题讨论】:

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

标签: java swing 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 是什么?
    猜你喜欢
    • 2013-04-04
    • 2015-07-19
    • 2018-02-23
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多