java - JLayeredPane 不更新 JLabel 的移动

标签 java swing user-interface jlabel jlayeredpane

我有一个 for 循环,可以更改 JLayeredPane 布局中 JLabel 的位置。

    c.setVisible(true);
    jLayeredPane.moveToFront(c);

    for (int i = 0; i < 1000; ++i) {
        c.setBounds(i, 500, 94, 136);
        System.out.println(c.getLocation());
        try {
            Thread.sleep(2);

        } catch (Exception e) {

        }
    }

此方法引用 jLayeredPane,它是从另一个类访问的。它确实更新了 JLabel cx 值,但它不会在屏幕上显示它。

我需要做什么才能使其实时更新?我需要它按顺序运行,而不是与程序的下一部分同时运行,因此我认为不允许使用多线程。

最佳答案

What do I have to do to make it update in real time?

不要使用Thread.sleep()。这将导致事件调度线程 (EDT) hibernate ,这意味着 GUI 无法重新绘制自身,直到整个循环执行完毕。

对于动画,您需要使用 Swing Timer

I need this to run in order, not simultaneous to the next part of the program

当计时器触发所需的次数时,您可以停止计时器并调用包含其余代码的方法。

此外,您不应该将“1000”硬编码为循环控制。当代码在不同的屏幕上执行时,你不知道屏幕的分辨率是多少。您可以使用 Toolkit 类和 getScreenSize() 方法根据您的实际要求获取要使用的适当尺寸。

关于java - JLayeredPane 不更新 JLabel 的移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44266951/

相关文章:

java - 如何在 Spring Boot 中访问 src/main/resources/folder 中的资源文件

java - 如何防止多个对话框同时出现?

python - 类型错误 : leftClick() missing 1 required positional argument: 'password'

java - 为什么我的 JButton 操作监听器没有响应?

java - 如何在关闭后保存 Java 应用程序的自定义状态?

java - JavaFX 中使用 Lambda 表达式的键绑定(bind)不起作用

java - Elasticsearch 传输客户端连接

java - Java 中的 toString 方法

Java文件上传大小检查

java - jws 应用程序无法加载 swing-layout