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

5

我遇到了一个JButton ActionListener的问题。我在另一个类中定义了一个doTheCleaning()方法,当它被调用时,会对我的GUI进行一系列更改。

public void doTheCleaning(){
    //change image icon
    //had thread.sleep here
    //insert to text area
    //had thread.sleep here
    //etc
}

然后在另一个类中,我实例化了包含doTheCleaning()方法的类,并将我的ActionListener写为我的jbutton的actionperformed()方法,如下所示:

public void actionPerformed(ActionEvent e){
   //some code
   //newClass.doTheCleaning();
}

我知道如何执行addActionListener()等操作,所以不需要对此进行质疑。我的问题是,当调用doTheCleaning()方法时,在我的GUI中执行的所有更改仅在单击按钮后应用。当这种情况发生时,标签和文本区域中发生的更改之间的连续性未显示出来。如果我直接在测试类中调用代码,则代码可以正常工作,但在actionperformed方法中调用它只显示我的GUI的最终状态。我需要展示哪个元素先改变,然后是什么,依此类推。

我如何实现这一点,当我需要这些更改仅在单击JButton时发生时?

**我还不太擅长使用java进行GUI。我希望你们能理解我的意思,即使我没有给出我的代码。但如果必要的话,我可以提供。谢谢。


你的意思是你有几个标签和文本域要更改,你希望它们一个接一个地发生,让用户看到每一步吗? - darrenp
为了更容易阅读,请遵循拼写规则(句子的第一个字母应该大写): - kleopatra
2
不要在GUI代码中使用类似Thread.sleep(...)的调用。相反,使用javax.swing.Timer来实现此目的,可能是因为您没有在EDT - 事件分派线程上更新您的内容,这可能会对您有所帮助 :-) - nIcE cOw
1个回答

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

更多相关信息,请阅读Swing中的并发


5
同意,加一。我还编辑了内容并添加了一个Swing中的并发教程链接。 - Hovercraft Full Of Eels

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接