移动时将新图像加载到 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 时阅读图像以获得更好的性能。