我试图在用户点击按钮时更新JLabel,就像这个伪代码一样:
private static void ButtonAction()
{
// Set label to `loading..`
// Perform action
// Set label to `ready.`
}
我试图使用:
frame.invalidate();
frame.validate();
frame.repaint();
到目前为止没有运气。或者我的按钮操作太快而无法看到它切换?
如何确保用户同时看到loading..
和ready
?
答案 0 :(得分:3)
或许我的按钮操作太快而无法看到它切换?
如果是,那么除非你想设置一个Timer来显示最终值,否则你无能为力。
如何确保用户同时看到加载...并准备就绪?
更常见的情况是,当您执行长时间运行的任务时,您需要使用Threads
,这样您就不会阻止框架响应事件并重新绘制自身。
阅读Concurrency上Swing教程中的部分以获取更多信息。也许你可以使用SwingWorker。
如果您不使用SwingWorker,则需要创建自己的Thread,然后在需要更新标签时使用SwingUtilities.invokeLater(...)。