Java - 为什么我的 JLabel 图标在执行代码行时不会立即更新?



(请原谅我的格式化)

我正在使用JLabel(jLabel3)作为我正在制作的游戏的背景图像。我有另一个JLabel(jLabel4)作为玩家。当玩家到达某个位置时,地图(jLabel3)将变为("/newpackage/Map2TreasureHunt.png")

我的代码:

if ((x == (66 + 5 * 50)) && (y == (215 + 51))) {
    jLabel3.setIcon(new ImageIcon(getClass().getResource("/newpackage/Map2TreasureHunt.png")));
        x = 316; //( 66 + 5*50) 
        y = 11; // y - 4 * 51;
    } jLabel4.setLocation(x, y);

我在Netbeans中通过Debug运行了这个,并且图标总是在if结束后更新。然后,我尝试了两个if:

if ((x == (66 + 5 * 50)) && (y == (215 + 51))) {
    jLabel3.setIcon(new ImageIcon(getClass().getResource("/newpackage/Map2TreasureHunt.png")));
        //x = 316; //( 66 + 5*50)
       // y = 11; // y - 4 * 51;
    } 
if (jLabel3.getIcon().toString().equals("/newpackage/Map2TreasureHunt.png")){
        x = 316; //( 66 + 5*50)
        y = 11; // y - 4 * 51;
    }

JLabel(jLabel3)在BOTH if运行后更新。

我不太明白这里发生了什么。如果有人知道一种更有效的方法来重写这些代码,那也太好了。

谢谢!-littleCode

Swing中的所有事情都发生在一个线程中:事件调度线程,它基本上执行以下操作:

  1. 等待事件(点击、按键等)
  2. 执行此事件的侦听器
  3. 重新粉刷需要的东西
  4. 返回到1

因此,当您仍在代码中对事件作出反应时,不会重新绘制任何内容。推论是,如果在事件dipatch线程中无限循环,UI将完全冻结。

相关内容

  • 没有找到相关文章

最新更新