JLayeredPane没有更新JLabel的移动

时间:2017-05-30 16:01:38

标签: 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 c x 值,但它没有在屏幕上显示。

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

1 个答案:

答案 0 :(得分:2)

  

我需要做些什么才能让它实时更新?

不要使用Thread.sleep()。这将导致Event Dispatch Thread (EDT)进入休眠状态,这意味着在整个循环执行完毕之前,GUI无法重新绘制。

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

  

我需要按顺序运行,而不是同时运行程序的下一部分

当Timer触发所需的次数时,然后停止Timer并调用包含其余代码的方法。

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