当用户单击按钮时,我尝试更新 JLabel,如以下伪代码:
private static void ButtonAction()
{
// Set label to `loading..`
// Perform action
// Set label to `ready.`
}
我尝试使用:
frame.invalidate();
frame.validate();
frame.repaint();
到目前为止还没有运气。或者也许我的按钮 Action 太快而看不到它的切换?
如何确保用户看到 loading..
和 ready
?
最佳答案
Or maybe my button action is too fast to see it switching?
如果是,那么您无能为力,除非您想设置一个计时器来显示最终值。
How can I make sure that the user sees both loading.. and ready?
更常见的情况是,当您执行长时间运行的任务时,您需要使用线程
,这样就不会阻止框架响应事件并重新绘制自身。
阅读 Swing 教程中关于 Concurrency 的部分了解更多信息。也许您可以使用 SwingWorker。
如果您不使用 SwingWorker,则需要创建自己的线程,然后在想要更新标签时使用 SwingUtilities.invokeLater(...)。
关于java - 如何每帧多次重绘 JFrame 及其组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367268/