Java JButton ActionListener-GUI仅在单击JButton后更新

Java JButton ActionListener-GUI仅在单击JButton后更新,java,swing,user-interface,jbutton,swingworker,Java,Swing,User Interface,Jbutton,Swingworker,我的JButton ActionListener有问题。我在另一个类中定义了一个dotheClean()方法,调用该方法时会对GUI进行一系列更改 public void doTheCleaning(){ //change image icon //had thread.sleep here //insert to text area //had thread.sleep here //etc } 然后在另一个类中,我实例化了包含dotheClean()

我的JButton ActionListener有问题。我在另一个类中定义了一个dotheClean()方法,调用该方法时会对GUI进行一系列更改

public void doTheCleaning(){
    //change image icon
    //had thread.sleep here
    //insert to text area
    //had thread.sleep here
    //etc
}
然后在另一个类中,我实例化了包含dotheClean()方法的类,并让我的ActionListener使用我的actionperformed()方法为我的jbutton编写,如下所示:

public void actionPerformed(ActionEvent e){
   //some code
   //newClass.doTheCleaning();
}
我知道如何做其他的事情,比如addActionListener()等等,所以不必对此提出疑问。我担心的是,调用dotheClean()方法时在GUI中执行的所有更改仅在单击按钮后适用。发生这种情况时,我的标签和文本区域中发生的更改之间的顺序没有显示。如果我在tester类中直接调用该代码,但在actionperformed方法中调用该代码只显示GUI的最终状态,那么该代码可以正常工作。我需要先显示哪个元素发生了变化,然后是下一个,依此类推

当我需要这些更改只在单击JButton时发生时,我如何实现它


**我还不太擅长用java做GUI。我希望你们能理解我的意思,不用我给出密码。但如果有必要,我可以。谢谢

不要在中执行任何密集操作,否则GUI将无响应,您可能看不到GUI更新。您可以使用的最佳选择是:

  • 重写,并将任何长操作放入此方法中,以便它将在单独的线程上运行,而不是在

  • 对于任何GUI创建或更改中GUI组件的状态,请使用将数据发送到。你需要重写。还请注意,在上执行

  • 返回后,在上执行,您可以覆盖它以将其用于任何GUI更新。您还可以使用检索从返回的值

  • 请注意,就是这样,您需要指定类型
    T
    是从和返回的对象类型,而
    V
    是通过传递到的元素类型

  • 方法通过首先调用来启动swing worker


有关这方面的更多信息,请阅读。

您的意思是您对标签和文本区域进行了几次更改,并且希望用户看到每一步后逐个进行更改吗?为了便于阅读,请遵守拼写规则(句子中的第一个字母应大写:-)不要使用
Thread.sleep(…)
类似于GUI代码中的调用。相反,如果您没有在EDT事件调度线程上更新您的内容,那么使用它可以帮助您:-)同意,1+。我还对它进行了编辑,添加了一个链接。@HovercraftFullOfEels谢谢。