从JButton actionListener

时间:2016-04-14 14:45:50

标签: java swing jlabel swingworker

我有一个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 个答案:

答案 0 :(得分:2)

  

println在控制台中显示正确的数字

然后这意味着您对JLabel的引用错误。

所以你可能1)通过该名称创建了一个实例变量,然后2)创建了一个具有相同名称的局部变量,并将该标签添加到了框架中。 Swing工作者只能访问实例变量。

摆脱局部变量。

如果您需要更多帮助,请发布展示问题的正确SSCCE。所有问题都应包括SSCCE。我们无法根据几行代码来判断问题究竟是什么。