2013-12-14 3 views
0

Я делаю небольшую программу для тестирования KeyListener, создавая основной класс и только класс, реализующий его. Я начал делать класс в классе, реализации ключевого слушателя, и добавив строку:KeyListener Не работает/Не называется?

this.addKeyListener(new Handler()); 

Но это не сработало, так что я сделал основной класс реализации ключевого слушателя, и до сих пор KeyPressed/набранный/освобожден не вызываются. Ive сократил класс много, так вот она:

public class Game_Main extends JPanel implements KeyListener{ 

JLabel ship = new JLabel(); 
JLabel bg = new JLabel(); 

static JFrame frame; 

public Game_Main(){ 
    setPreferredSize(size); 

    this.addKeyListener(this); 


} 

public static void main(String[] args){ 
    Game_Main g = new Game_Main(); 
    frame = new JFrame(); 

    frame.setPreferredSize(size); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.add(g); 
    frame.setVisible(true); 

} 

    public void keyTyped(KeyEvent e) { 
     System.out.println("ds"); 
    } 

} 
+0

Попробуйте определить, какой ключ является типом, используя KeyEvent в требуемом методе. – iWumbo

+4

1) Для Swing обычно используют привязки клавиш на основе AWT на нижнем уровне, KeyListener. Подробнее о том, как их использовать, см. [Как использовать привязки клавиш] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html). 2) «JPanel» обычно не фокусируется на ключевых событиях. –

+1

Возможный дубликат [KeyListener не работает (requestFocus не фиксирует его)] (http://stackoverflow.com/questions/18029136/keylistener-not-working-requestfocus-not-fixing-it) –

ответ

1

Другим решением этой проблемы было бы сделать экземпляр в основной метод, например:

KeyListener() listener = new Game_Main(); 

Затем вы можете сократить линию :

this.addKeyListener(this); 

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