(请原谅我的格式化)
我正在使用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
因此,当您仍在代码中对事件作出反应时,不会重新绘制任何内容。推论是,如果在事件dipatch线程中无限循环,UI将完全冻结。