2015-12-01 2 views
0

Я пытаюсь добавить keylistener в JFrame, но всякий раз, когда я нажимаю кнопку, ничего не происходит. Я пытаюсь заставить keylistener просто распечатать что-то основное, но всякий раз, когда я пытаюсь использовать оператор if, ничего не происходит в консоли.KeyListener ничего не сделает

package gui; 

import java.awt.event.KeyEvent; 
import java.util.ArrayList; 
import javax.swing.*; 
import javax.swing.JButton; 

public class KeyListener implements java.awt.event.KeyListener { 

ArrayList <JButton> _buttons; 
JFrame _frame1; 

public KeyListener(ArrayList <JButton> buttons, JFrame frame1){ 
    _buttons = buttons; 
    _frame1 = frame1; 
    _frame1.addKeyListener(this); 
    _frame1.requestFocusInWindow(); 
    _frame1.setFocusable(true); 
    this.keyTyped(); 
} 

@Override 
public void keyTyped(KeyEvent e) { 
    // TODO Auto-generated method stub 
    if (e.getKeyCode() == KeyEvent.VK_LEFT){ 

     System.out.println("yes"); 
    } 
} 

@Override 
public void keyPressed(KeyEvent e) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void keyReleased(KeyEvent e) { 
    // TODO Auto-generated method stub 

} 

} 

Это мой KeyListener класс

Это моя игра класс

package model; 

import java.awt.event.KeyListener; 

import javax.swing.*; 

public class Game implements Runnable{ 

KeyListener _keylistener; 

@Override 
public void run() { 
    JFrame frame1 = new JFrame("KeyBricks"); 
    frame1.setVisible(true); 

    JPanel panel1 = new JPanel(); 


    frame1.addKeyListener(_keylistener); 
    model.Board board = new model.Board(panel1); 

    frame1.add(panel1); 

    frame1.pack(); 

    frame1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 


} 

} 
+1

Попробуйте добавить его к 'panel' не' frame' – 3kings

+0

Я не вижу разницы, которая могла бы сделать –

+1

Хорошо попробуйте и посмотрите: P – 3kings

ответ

0

Вы можете зарегистрировать KeyEventDispatcher:

KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(new KeyEventDispatcher() { 
    @Override 
    public boolean dispatchKeyEvent(KeyEvent e) { 
     System.out.println("dispatchKeyEvent: "+e); 
     return false; 
    } 
}); 

Обратите внимание, что зарегистрированные KeyEventDispatchers получат KeyEvents до, они отправляются на свои цели, что позволяет перенацелить событие, уничтожить его, отправить событие или внести другие изменения.

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