Java 如何在重绘期间而不是之后更改按钮?
在jButton的actionPerformed方法中,我有以下代码:Java 如何在重绘期间而不是之后更改按钮?,java,swing,jframe,jbutton,repaint,Java,Swing,Jframe,Jbutton,Repaint,在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.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行之后,以及多个其他解决方案,尝试在方法期间强迫该死的东西重新绘制,但不管怎样,它只会在最后发生
我注意到的另一点是,如果在方法中间调用joptPANE,框架将重新绘制(背景),这很有趣。
什么是在方法的末尾自动发生的,我需要调用它以使其在方法中发生提前谢谢 您正在用长时间运行的代码阻塞Swing事件线程,这会阻止Swing绘制文本更改。解决方案:
- 在后台线程中执行长时间运行的代码,例如SwingWorker的doInBackground方法
- 但是请确保在Swing事件线程上进行大多数Swing调用
- 阅读本教程以了解有关Swing事件线程和线程问题的详细信息