首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java JList未更新

Java JList未更新
EN

Stack Overflow用户
提问于 2013-12-24 08:20:22
回答 1查看 3.4K关注 0票数 0

为什么我的JList没有更新?

我重新实例化了list对象。我重新粉刷并重新验证...出什么问题了?

需要更多细节

外部类:

代码语言:javascript
复制
                ControlPanel.usernames.add(username);
            ControlPanel.list = new JList(ControlPanel.usernames.toArray());
            ControlPanel.panel.repaint();
            ControlPanel.panel.revalidate();

ControlPanel.java

代码语言:javascript
复制
package main;

import java.awt.BorderLayout;
import java.util.ArrayList;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

@SuppressWarnings("serial")
public class ControlPanel extends JFrame {

public static JPanel panel = new JPanel();
JScrollPane scrollpane;
static JLabel players;
static String s;
public static ArrayList<String> usernames = new ArrayList<String>();
public static JList list;

// public static String categories[] = {};

public ControlPanel() {
    list = new JList(usernames.toArray());
    scrollpane = new JScrollPane(list);

    panel.add(scrollpane, BorderLayout.CENTER);
    add(panel);

    setTitle("RuneShadows CP");
    setSize(400, 400);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
}
}
EN

回答 1

Stack Overflow用户

发布于 2013-12-24 08:23:14

您已经创建了一个尚未添加到屏幕的新JList

而是创建一个新的ListModel,并将其设置为屏幕上已有的list的模型

代码语言:javascript
复制
ControlPanel.usernames.add(username);
ControlPanel.list,setModel(new UserNamesListModel(ControlPanel.usernames));
ControlPanel.panel.repaint();
ControlPanel.panel.revalidate();

有关详细信息,请参阅How to use lists

坦率地说,你的访问模型是可怕的。例如,它允许从任何地方完全访问所有内容,因此任何讨厌的类都可能出现并完全拆卸您的UI。

if static的使用不是一种易于访问的解决方案,而且随着时间的推移,它会大大降低应用程序的灵活性。

您应该提供简单的getter和setter来允许外部类访问class.eapqually中包含和管理的信息,您应该为该类提供其他类可能需要使用的管理功能,例如refresh

没有人应该关心刷新是如何工作的,只关心它是如何工作的……

首先来看一下How to use lists

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;
import javax.swing.AbstractListModel;

public class UserNamesListModel extends AbstractListModel<String> {

    private List<String> userNames;

    public UserNamesListModel(List<String> userNames) {
        this.userNames = new ArrayList<>(userNames);
    }

    @Override
    public int getSize() {
        return userNames.size();
    }

    @Override
    public String getElementAt(int index) {
        return userNames.get(index);
    }

}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20753178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档