2015-04-17 2 views
0

У меня проблема с моим кодом при нажатии на стрелку вверх или вниз ничего не происходит. Вот мой код и извините за мой английский. Это часть для Racket 1, часть для Racket 2 id аналогична.KeyListener для JLabel не работает для меня

//--->Racket 1 : 
    Racket1.addKeyListener(this); 
    Racket1.setBounds(50, 200, 16, 100); //<----- setBounds (Placer position du JLabel x,y + taille de la plateforme x,y) 
    Racket1.setBackground(Color.white); 
    Racket1.setOpaque(true); 
    Racket1.setFocusable(true);   //<----- Permet d'utiliser KeyListener Pour un JLabel 
    Racket1.requestFocus(); 

И это часть KeyListener:

public void keyTyped (KeyEvent e) {    
    } 

public void keyPressed(KeyEvent e) {    


    if (e.getKeyCode() == KeyEvent.VK_UP) {   
     Racket1.setLocation(Racket1.getX(), Racket1.getY() +20);  
    }   

    else if (e.getKeyCode() == KeyEvent.VK_DOWN) {   
     Racket1.setLocation(Racket1.getX(), Racket1.getY() -20);    
    }   

    else if (e.getKeyCode() == 'z') {   
     Racket2.setLocation(Racket2.getX(), Racket2.getY() +20);    
    }   

    else if (e.getKeyCode() == 's') {   
     Racket2.setLocation(Racket2.getX(), Racket2.getY() -20);    
    }  
} 

public void keyReleased(KeyEvent e) { 
+0

Что делают ракеты? – rath

+1

Возможно, вы захотите немного подробнее узнать о поведении и о том, что вы пробовали. Вы проверили, действительно ли вызван метод keyPressed()? – macserv

+0

Ракетки, как предполагается, движутся, есть две ракеты игры в понг – Silver

ответ

0

Ваша проблема в том, что, вероятно, JLabel не является владельцем фокуса. По умолчанию JLabels не настраиваются. Вам необходимо позвонить по телефону

yourLabel.setFocusable(true); 
yourLabel.requestFocus(); 

И тогда это должно сработать.

+0

Я сделал это, мой JLabel можно сфокусировать I использовались функции setFocusable и requestfocus. – Silver

+0

Учитывая, что есть два ракеты, вы сможете только перенести одну ракетку с таким подходом. Не используйте KeyListener! – camickr

2

Не используйте KeyListener. Только один компонент может иметь фокус за раз, поэтому вы сможете только переместить один из ракет.

Вместо этого вы должны использовать KeyBindings. Key Bindings используются для привязки Action к KeyStroke, и компонент не нуждается в фокусе.

Отъезд Motion Using the Keyboard для получения дополнительной информации. У KeyboardAnimation.java есть пример, который использует две метки.

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