移动时将新图像加载到 jlabel 时出错
Error loading a new image into a jlabel while I move
我想要的是按“A”、“S”、"D "和“W”字符向各自的方向键移动。
问题是每次我改变方向时,我都会改变 JLabel 的图像(它是一个箭头)。
它确实工作得很好,但每次更改图像时,JLabel 都会回到其默认位置一秒钟。然后 JLabel 从原来的位置继续。
这是代码。
private int pX;
private int pY;
public MovePj() {
initComponents();
pX=labelPj.getX();
pY=labelPj.getY(); }
private void formKeyPressed(KeyEvent evt) {
switch(evt.getKeyCode()){
case 87: //Norte
pY=pY-movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\movement\07-north.png"));
break;
case 83: //Sur
pY=pY+movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\movement\03-sur.png"));
break;
case 68: //Este
pX=pX+movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\movement\01-east.png"));
break;
case 65: //Oeste
pX=pX-movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\movement\05-west.png"));
break;
default:
break;
}
labelPersonaje.setLocation(pX, pY);
//labelPj.setBounds(pX, pY, labelPj.getWidth(), labelPj.getHeight());
}
角色移动正确,但是要改变JLabel的形象,这个returns到预设点
谢谢。
setIcon(...)
方法将调用:
revalidate();
repant();
在导致调用布局管理器的标签上。所以我猜你需要使用:
panel.setLayout( null );
防止重新计算标签的size/location。您可以在创建面板时执行此操作。
此外,读取图像以响应 KeyEvent 也不是一个好主意。您应该在加载 class 时阅读图像以获得更好的性能。
我想要的是按“A”、“S”、"D "和“W”字符向各自的方向键移动。
问题是每次我改变方向时,我都会改变 JLabel 的图像(它是一个箭头)。
它确实工作得很好,但每次更改图像时,JLabel 都会回到其默认位置一秒钟。然后 JLabel 从原来的位置继续。
这是代码。
private int pX;
private int pY;
public MovePj() {
initComponents();
pX=labelPj.getX();
pY=labelPj.getY(); }
private void formKeyPressed(KeyEvent evt) {
switch(evt.getKeyCode()){
case 87: //Norte
pY=pY-movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\movement\07-north.png"));
break;
case 83: //Sur
pY=pY+movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\movement\03-sur.png"));
break;
case 68: //Este
pX=pX+movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\movement\01-east.png"));
break;
case 65: //Oeste
pX=pX-movimiento;
labelPersonaje.setIcon(new ImageIcon(rutaBase+"Imagenes\movement\05-west.png"));
break;
default:
break;
}
labelPersonaje.setLocation(pX, pY);
//labelPj.setBounds(pX, pY, labelPj.getWidth(), labelPj.getHeight());
}
角色移动正确,但是要改变JLabel的形象,这个returns到预设点
谢谢。
setIcon(...)
方法将调用:
revalidate();
repant();
在导致调用布局管理器的标签上。所以我猜你需要使用:
panel.setLayout( null );
防止重新计算标签的size/location。您可以在创建面板时执行此操作。
此外,读取图像以响应 KeyEvent 也不是一个好主意。您应该在加载 class 时阅读图像以获得更好的性能。