2016-04-30 9 views
2

Я не знаю, почему мое приложение не может обнаружить мою клавиатуру. Применение его JFrame, который реализует SerialPortEventListener и KeyListener. В Jframe моего приложения у меня есть 1 панель с двумя панелями. Когда я нажимаю несколько кнопок, это не работает (НИЧЕГО В ВЫХОДЕ).KeyListener не работает, моя Jframe не может распознать мою клавиатуру

Я покажу вам мой код (не все, только самые Importants части):

МОЙ КЛАСС:

public class java_arduino_frame extends javax.swing.JFrame implements SerialPortEventListener, KeyListener { 

ключи ФУНКЦИИ:

public void keyTyped(KeyEvent e){ 
    throw new UnsupportedOperationException("not yet"); 
    } 

    public void keyPressed(KeyEvent e){ 
     int keyCode; 
     keyCode = e.getKeyCode(); 
     System.out.println(keyCode); 
    } 

    public void keyReleased(KeyEvent e){ 
    throw new UnsupportedOperationException("not yet"); 
    } 

МОЙ КОНСТРУКТОР МОЕГО КЛАССА:

public java_arduino_frame() { 


getContentPane().setBackground(Color.LIGHT_GRAY); 
initComponents(); 
addKeyListener(this); 

} 

ГЛАВНЫЙ

public static void main(String args[]) { 
    strong text 
    java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new java_arduino_frame().setVisible(true); 
     } 
    }); 

ответ

1

KeyListener будет реагировать только тогда, когда компонент зарегистрировано фокусирующейся и имеет фокус, так как нажатие кнопки приведет к тому, фокус передается на кнопку, рамка больше не будет иметь фокус ввода.

Также маловероятно, что рамка также сможет непосредственно получать фокус клавиатуры.

Как правило, вы должны использовать Key Bindings API, что даст вам возможность преодолевать проблемы, связанные с фокусом.

В зависимости от того, что вы делаете, вы также можете использовать JTextArea или JTextField с DocumentListener, предполагая, что вы хотите отправить символы через последовательное соединение. Посмотрите Listening for Changes on a Document для получения более подробной информации