为什么我的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);
}
}
答案 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