(原谅我的格式化)
我正在使用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之后更新。
我不太明白这里发生了什么。如果有人知道一种更有效的方法来重写这段代码,那也很不错。
谢谢! -littleCode
答案 0 :(得分:1)
Swing中的所有内容都发生在一个线程中:事件派发线程,基本上执行以下操作:
所以,当你仍然在代码内部对一个事件作出反应时,什么都不会被重新绘制。推论是,如果你在事件dipatch线程中无限循环,UI将完全冻结。