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

时间:2016-04-25 03:06:45

标签: 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

这样可行,但只有在方法完成后才会产生视觉效果(重新绘制)。

如果在//这里有更多的东西,我的代码需要很长时间才能完成,btnLogin更改的效果在代码完成后才会生效。

我尝试输入:

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

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

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

在我需要调用的方法结束时会自动发生什么事情才能在方法中实现?

提前致谢!

1 个答案:

答案 0 :(得分:2)

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

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