【问题标题】:JList doesn't always show the entriesJList 并不总是显示条目
【发布时间】:2012-01-19 08:04:52
【问题描述】:

我正在尝试创建一个游戏大厅,我的服务器向我发送游戏列表,每次有新游戏时,都会执行以下代码:

    public void setGames(ArrayList<Game> games) {
    if (listModel != null) {
        System.out.println(games.size() + " games");
        listModel.clear();
        int index = 0;
        for (Game game : games) {
            listModel.add(index, game);
            index++;
            System.out.println(index);
        }
    }
    System.out.println(listModel.getSize());
}

但是,有时列表没有显示任何条目,但输出确实显示: 6场比赛 1 2 3 4 5 6 6

截图:

我确实检查了我的文件,无论 listModel 是否被清除、条目是否被删除或 listmodel 发生了任何事情,但事实并非如此......

当我向 JList 添加重绘时,错误仍然存​​在...... 截屏:

【问题讨论】:

  • 1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) 确保在 EDT 上执行 GUI 更新。 3)鉴于您的屏幕截图可以总结为“没有出现新条目”,我发现它们是无用的(并且浪费带宽)噪音。
  • 你违反了封装。我会说这是你麻烦的根本原因。如果您将任务委派给适当的对象,这将不是问题。我建议您阅读JList 组件的内部工作原理。
  • 您确定您正在调试/填充的 listModel 与设置为 JList 的实例相同吗?
  • 好的,然后回到第一步:参见@Andrew Thompson 的第一条评论。发生了一些可疑的事情...显示您的代码(以 sscce 的形式 :-)
  • 阅读有关并发的教程章节 - 您需要使用 SwingUtilities.invokeLater 或自定义 SwingWorker

标签: java swing jscrollpane jlist defaultlistmodel


【解决方案1】:

更改模型后,您需要在 JList 上调用 repaint。

【讨论】:

  • 刚试了一下,好像没用(见添加的截图)
  • 我在添加新列表之前使用 listModel.clear() 删除所有对象,所以我没有得到任何双打...
  • 不,永远不需要调用 repaint - 如果通知设置正确
  • @kleopatra - 那么答案是什么?
  • 不知道 - 信息不足。但这与您的答案是否错误无关,无论正确答案是什么:-)
猜你喜欢
  • 2015-05-19
  • 2017-07-20
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多