java从JButton actionListener更新JLabel
我有一个swing应用程序,它根据用户输入的名称列表创建许多面板,用户输入的每个名称都有一个面板。在应用程序的底部,我有一个JPanel,有一个按钮关闭当前面板,还有一个JLabel显示当前打开面板的数量
我像这样初始化标签
String[] usernames = input("Usernames");
int totalTabs = usernames.length;
JLabel lblRemaining = new JLabel("Remaining: " + totalTabs);
然后,我在“关闭”按钮上添加了一个动作侦听器,并尝试使用SwingWorker更新标签,但它似乎没有更新
close.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
unlookup(username);
SwingWorker<String, String> updateLabel = new SwingWorker<String, String>(){
@Override
protected String doInBackground() throws Exception {
String tabTotal = Integer.toString(desktop.getTabCount());
return tabTotal;
}
@Override
protected void done(){
try {
lblRemaining.setText(get());
System.out.println(get());
} catch (Exception ignore) {
}
}
};
updateLabel.execute();
}
});
println在控制台中显示了正确的图形,因此我知道这一定与GUI没有更新有关,但我似乎无法理解
我对Java和Swing还比较陌生,所以希望这是一件相当明显的事情,我做错了
谢谢:)
# 1 楼答案
这就意味着你对JLabel的引用是错误的
因此,您可能1)创建了一个同名的实例变量,然后2)创建了一个同名的局部变量,并将该标签添加到框架中。Swing worker将只能访问实例变量
去掉局部变量
如果你需要更多的帮助,那么发布一个适当的SSCCE来演示问题。所有问题都应包括
SSCCE
。基于几行代码,我们无法判断问题到底是什么