如何使按钮更改重绘 -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 事件线程和线程问题的详细信息。
在 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 事件线程和线程问题的详细信息。