我有一个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的新手,所以希望我做错了很明显!
谢谢:)
答案 0 :(得分:2)
println在控制台中显示正确的数字
然后这意味着您对JLabel的引用错误。
所以你可能1)通过该名称创建了一个实例变量,然后2)创建了一个具有相同名称的局部变量,并将该标签添加到了框架中。 Swing工作者只能访问实例变量。
摆脱局部变量。
如果您需要更多帮助,请发布展示问题的正确SSCCE。所有问题都应包括SSCCE
。我们无法根据几行代码来判断问题究竟是什么。