在 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 事件线程和线程问题的详细信息的教程。
关于java - 如何在方法期间而不是之后进行按钮更改重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36831401/