Java JList未更新

时间:2013-12-24 00:20:22

标签: java arrays swing arraylist jlist

为什么我的JList没有更新?

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

needmoredetailsneedmore

外部课程:

                ControlPanel.usernames.add(username);
            ControlPanel.list = new JList(ControlPanel.usernames.toArray());
            ControlPanel.panel.repaint();
            ControlPanel.panel.revalidate();

ControlPanel.java

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);
}
}

1 个答案:

答案 0 :(得分:4)

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

相反,请创建一个新的ListModel并将其设置为已在屏幕上的list的模型

ControlPanel.usernames.add(username);
ControlPanel.list,setModel(new UserNamesListModel(ControlPanel.usernames));
ControlPanel.panel.repaint();
ControlPanel.panel.revalidate();

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

坦率地说,您的访问模式很吓人。它允许在任何地方完全访问所有形式,因此任何讨厌的类都可能出现并完全拆除你的UI,例如。

如果static不是一个易于访问的解决方案,那么使用它会大大降低应用程序的灵活性。

您应该提供简单的getter和setter,以允许外部类访问类中包含的信息并由类管理。事实上,您应该为类提供其他类可能需要使用的管理功能,例如{{1 }}

没有人应该完全关心刷新是如何工作的,只有它确实...

首先看一下How to use lists

refresh