如何使按钮更改重绘 -during- 方法,而不是之后?

How to make button changes repaint -during- method, not after?

在 jButton 的 actionPerformed 方法中,我有以下代码:

btnLogin.setText("Logging In...");
btnLogin.setPreferredSize(new Dimension(110, 29));
btnLogin.setEnabled(false);

//more stuff here, irrelevant to this

这有效,但是一旦方法完成,它只会产生视觉效果(重新绘制)。

如果在 //more stuff here 区域中我有需要很长时间才能完成的代码,则 btnLogin 更改的效果在该代码完成后才会生效。

我试过输入:

this.revalidate();
this.repaint(); 

直接在前 3 行和其他多个解决方案之后,试图强制该死的东西在方法期间重绘,但无论如何,它只发生在最后!

我注意到的另一件事是,如果我在方法中间调用 JOptionPane,框架将重新绘制(在后台),这很有趣。

什么是在方法结束时自动发生,我需要调用以使其在方法期间发生?

提前致谢!

您使用长代码 运行 阻塞了 Swing 事件线程,这会阻止 Swing 绘制文本更改。解决方案:

  • 在后台线程中执行长代码 运行,例如在 SwingWorker 的 doInBackground 方法中。
  • 但请确保在 Swing 事件线程上进行大部分 Swing 调用。
  • 阅读 Concurrency in Swing 教程以了解有关 Swing 事件线程和线程问题的详细信息。