Java JList 仅在最小化或最大化后刷新

标签 java swing jlist

我有一个 JList 连接到一个集合。 当集合发生变化时,我需要 JList 自动刷新。但是我可以看到,只有在我最小化(或最大化)JFrame 之后,我的 JList 才会刷新。

为什么?

我是 Java 的新手,我正在努力学习。

我有列表模型的这个集合:

public class UserCollection extends Vector<User> implements ListModel{

private static final long serialVersionUID = 2668410577023194442L;

@Override
public void addListDataListener(ListDataListener arg0) {
    System.out.println("add list! --- " +arg0.toString());
}

@Override
public Object getElementAt(int index) {
    return this.get(index).getName();
}

@Override
public int getSize() {
    return(this.elementCount);
}

@Override
public void removeListDataListener(ListDataListener arg0) {}

}

在另一个类中,我使用 userList.add(u1);userList.remove(u1);

填充集合

JFrame 类中我有:

JList list = new JList();
list.setModel(xmppManager.userList);

我可以在控制台上看到集合发生变化,如果我最小化 JFrame 和/或最大化,JList 会正确刷新...

最佳答案

如果可以,我建议您使用 DefaultListModel 作为 JList 的模型。该模型将在模型更改时自动更改 View (JList),并使您的生活更加轻松。如果您绝对必须使用自己创建的集合,那么看看您是否可以让包含它的类扩展一个 AbstractListModel。如果这样做,请务必在每次更改模型中的数据时调用适当的 fireXXXX() 方法。

关于Java JList 仅在最小化或最大化后刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973945/

相关文章:

java - 如何使用 javax Mail Api 标记 java 应用程序接收的消息?

java - valueChanged 事件监听器 java swing = 为什么双击?

java - Actionlistener 将 Jlist 信息输出到文本区域

java - 如何避免将此方法和所有其他变量设为静态?

java - 如何让 swing 应用程序知道屏幕尺寸的变化?

java - 如何使用构造函数注入(inject)模拟类

java - 不幸的是,<应用程序名称>已停止

java - CXF 服务的自定义拦截器以允许 Spring Security 身份验证

Java TextField getText() 给我一个无法比较的字符串

java - 更改另一个类的 JLabel 上的文本