我一直在做一个聊天室项目,我试图用另一个类的 ArrayList 填充 GUI 的一部分,我试图使用 JList 和 JTextArea 但由于某种原因,我的ArrayList 传递给下一个类后始终为空。我已经被困住了几天,我研究了很多并浏览了许多类似的主题,但没有找到我的答案。
服务器类
private static ArrayList<ClientInfo> clients = new ArrayList<ClientInfo>();
private static ArrayList<String> membersList = new ArrayList<String>();
public static void memberlist() {
for (ClientInfo userName : clients) {
if (!membersList.contains(userName.getName())) {
membersList.add(userName.getName());
}
}
}
public ArrayList<String> getMembers() {
System.out.println("This was called from another class");
return membersList;
}
clients.add(new ClientInfo(name, ClientID++, packet.getAddress(), packet.getPort()));
memberlist();
所以我有一个客户 ArrayList,但我需要一个只有用户名的列表,所以我创建了另一个名为 membersList 的 ArrayList,在此我使用 for 循环从客户列表中取出名称,然后将它们放入我的新列表中我创建了一个应该返回这些名称的 getter 方法。
最后一点在同一个类中的一个单独的方法中,它在我调用 memberlist 方法之后添加客户端信息。
ClientWindow 类
private static JTextArea membersList = new JTextArea();
Server members = new Server();
membersList.setEditable(false);
membersList.append(members.getMembers() + "\n");
System.out.println(membersList);
在我的 GUI 类中,我创建了一个 JTextArea 并尝试使用 ArrayList getter 方法填充它,但是一旦它被传递给我的 GUI 类,arraylist 总是为空的,我之前使用 JList 来做到这一点,我有完全相同的结果然后我的朋友告诉我这个列表是空的,因为我正在使用 .toArray 来转换 ArrrayList。该列表在服务器类中打印时始终包含用户名,但一旦到达 ClientWindow 类,它就是空的。所以我尝试使用 JTextArea 认为我解决了问题,但列表再次为空。
以前的 JList 代码
private JList<String> activeMembers;
Server members = new Server();
activeMembers = new JList<String>(members.getMembers().toArray(new String[0]));
activeMembers.setVisibleRowCount(4);
activeMembers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
任何帮助将不胜感激,这是我在本网站上的第一篇文章,所以如果我有什么不清楚的地方,我很抱歉。 (ps:对编码也很陌生)