【问题标题】:JButton ActionListener - GUI updates only after JButton is clickedJButton ActionListener - GUI 仅在 JButton 被点击后更新
【发布时间】:2012-07-17 17:16:17
【问题描述】:

我的 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() 方法为我的 jbutton 编写了 ActionListener,如下所示:

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

我知道如何完成 addActionListener() 之类的其他操作,因此无需对此提出质疑。我担心的是,调用 doTheCleaning() 方法时在我的 GUI 中执行的所有更改仅在单击按钮后才适用。发生这种情况时,我的标签和文本区域中发生的更改之间的连续性没有显示出来。如果我直接在我的测试程序类中调用它,但在 actionperformed 方法中调用它只显示我的 GUI 的最终状态,代码工作正常。我需要显示哪个元素首先更改,然后是下一步,等等。

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

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

【问题讨论】:

  • 您的意思是您对标签和文本区域进行了多次更改,并且您希望它们在用户看到每一步的情况下一一发生?
  • 为了方便阅读,请遵守拼写规则(句子中的第一个字母应大写:-)
  • 不要在 GUI 代码中使用 Thread.sleep(...) 之类的调用。而是为此目的使用javax.swing.TImer,可能是您没有在 EDT 上更新您的东西 - 事件调度线程,这可能会对您有所帮助:-)

标签: java swing user-interface jbutton swingworker


【解决方案1】:

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

有关更多信息,请阅读Concurrency in Swing

【讨论】:

猜你喜欢
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多