如何每帧多次重绘JFrame及其组件?

时间:2016-05-21 19:41:29

标签: java swing jframe jpanel rendering

我试图在用户点击按钮时更新JLabel,就像这个伪代码一样:

private static void ButtonAction()
{
    // Set label to `loading..`

    // Perform action

    // Set label to `ready.`
}

我试图使用:

frame.invalidate();
frame.validate();
frame.repaint();

到目前为止没有运气。或者我的按钮操作太快而无法看到它切换?

如何确保用户同时看到loading..ready

1 个答案:

答案 0 :(得分:3)

  

或许我的按钮操作太快而无法看到它切换?

如果是,那么除非你想设置一个Timer来显示最终值,否则你无能为力。

  

如何确保用户同时看到加载...并准备就绪?

更常见的情况是,当您执行长时间运行的任务时,您需要使用Threads,这样您就不会阻止框架响应事件并重新绘制自身。

阅读Concurrency上Swing教程中的部分以获取更多信息。也许你可以使用SwingWorker。

如果您不使用SwingWorker,则需要创建自己的Thread,然后在需要更新标签时使用SwingUtilities.invokeLater(...)。