gpt4 book ai didi

Java JList 不更新

转载 作者:行者123 更新时间:2023-12-01 18:38:48 25 4
gpt4 key购买 nike

为什么我的 JList 没有更新?

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

需要更多详情需要更多

外部类:

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

控制面板.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);
}
}

最佳答案

您创建了一个新的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并不是一个易于访问的解决方案,并且随着时间的推移会大大降低应用程序的灵 active 。

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

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

首先查看 How to use lists

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

}

关于Java JList 不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20753178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com