Java JButton ActionListener-GUI仅在单击JButton后更新
我的JButton ActionListener有问题。我在另一个类中定义了一个dotheClean()方法,调用该方法时会对GUI进行一系列更改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()
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谢谢。