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

标签 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();

到目前为止还没有运气。或者也许我的按钮 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/

相关文章:

java - 使用 Java 中的输入创建 for 循环

java - 连接池环境中是否明确需要 statement.close()?

java - Swing 按钮在执行操作之前不可见

java - 复杂对象到 JTable

java - 无法让图像显示在 Swing 中

Java Swing : How to access variables in a 2nd frame from the first frame?

java - Java或开源项目构想

java - 图像在一个全新的 jframe 中?

Java - JFrame 根本不显示其内容

java - JFrame 背景颜色未正确更改