2015-02-18 2 views
0

Что я хочу, так это то, что нажмите «A», «S», «D» и «W», символ перемещается в соответствующие клавиши направлений.Ошибка при загрузке нового изображения в jlabel во время перемещения

Проблема в том, что каждый раз, когда я меняю направление, я меняю изображение 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 это возвращается к заданной точке.

Спасибо.

+0

Попробуйте выполнить runnable пример вашей проблемы – MadProgrammer

+0

1) Для лучшей помощи в ближайшее время отправьте сообщение [MCVE] (http://stackoverflow.com/help/mcve) (минимальный полный проверяемый пример) или [SSCCE] (http: //www.sscce.org/) (Short, Self Contained, Correct Example). 2) Один из способов получить изображение (-ы) для примера - это горячая ссылка на изображения, видимые в [этом Q & A] (http://stackoverflow.com/q/19209650/418556). –

+0

Было бы полезно увидеть код, относящийся к контейнеру ярлыка. –

ответ

0

Метод setIcon(...) будет вызывать:

revalidate(); 
repant(); 

на этикетке, которая заставляет макет менеджер, который будет вызван. Так что я бы предположил, что вам нужно использовать:

panel.setLayout(null); 

, чтобы предотвратить размер/местоположение метки из пересчета. Это можно сделать при создании панели.

Также не рекомендуется читать изображения в ответ на KeyEvent. Вы должны прочитать изображения, когда класс загружен для лучшей производительности.

+0

Спасибо за всех, и спасибо вам, что ваш ответ решил мою проблему. Вот и все, просто называя «this.getContentPane(). SetLayour (null);» я починил это. Еще раз спасибо – Thratos

Смежные вопросы