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

时间:2012-07-18 15:48:28

标签: java swing user-interface jbutton swingworker

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

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

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

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

我知道如何像addActionListener()那样完成剩下的工作,所以不需要对此提出质疑。我担心的是,调用doTheCleaning()方法时执行的GUI中的所有更改仅在单击按钮后才适用。发生这种情况时,我的标签和textarea中发生的更改之间的连续性未显示。如果我直接在我的测试器类中调用它,但在actionperformed方法中调用它只显示我的GUI的最终状态,代码工作正常。我需要先显示哪个元素已更改,然后是下一个元素,依此类推。

当我需要在单击JButton时发生这些更改时,我怎么能实现它?

**我在java中用GUI做的不太好。我希望你们在没有我提供代码的情况下理解我的观点。但如果有必要,我可以。谢谢。

1 个答案:

答案 0 :(得分:12)

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

有关详情,请阅读Concurrency in Swing