有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    The println is showing the correct figure in the console

    这就意味着你对JLabel的引用是错误的

    因此,您可能1)创建了一个同名的实例变量,然后2)创建了一个同名的局部变量,并将该标签添加到框架中。Swing worker将只能访问实例变量

    去掉局部变量

    如果你需要更多的帮助,那么发布一个适当的SSCCE来演示问题。所有问题都应包括SSCCE。基于几行代码,我们无法判断问题到底是什么