KeyEvents treten nicht ein



  • Hi. Habe folgenden Anfang einer Klasse geschrieben, die KeyEvents verarbeiten soll. Aber das tut sie nicht. Warum?

    import java.awt.Window;
    import java.awt.AWTEvent;
    import java.awt.Graphics;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseEvent;
    import java.awt.event.KeyListener;
    import java.awt.event.KeyEvent;
    import java.awt.Color;
    
    public class Playground extends Window implements MouseListener, KeyListener {
    
        Main main;
        VComponent current;
    
        public Playground(Main main) {
    
            super(main);
            setSize(800, 600);
            setBackground(Color.lightGray);
            enableEvents(AWTEvent.KEY_EVENT_MASK);
            addMouseListener(this);
            addKeyListener(this);
            this.main = main;
        }
    
        public final void start() {
    
            requestFocus();
            repaint();
    
        }
    
        public final void exit() {
    
        }
    
        public final void paint(Graphics g) {
    
        }
    
        public final void mouseExited(MouseEvent e) {
    
        }
    
        public final void mouseEntered(MouseEvent e) {
    
            requestFocus();
    
        }
    
        public final void mouseClicked(MouseEvent e) {
        }
    
        public final void mousePressed(MouseEvent e) {
        }
    
        public final void mouseReleased(MouseEvent e) {
        }
    
        public final void keyTyped(KeyEvent e) {
    
            if (e == null) System.out.println("e == null");
            System.out.println("keyTyped");
            if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
                System.exit(0);
            }
        }
    
        public final void keyPressed(KeyEvent e) {
    
            System.out.println("keyPressed");
        }
    
        public final void keyReleased(KeyEvent e) {
        }
    
    }
    


  • 1.) Was heißt "Aber das tut sie nicht"? kommt nichts auf der Konsole, ...?

    2.) Lass mal die Zeile weg: enableEvents(AWTEvent.KEY_EVENT_MASK);
    Möglicherweise geht's dann schon.

    3.) Die Methode keyTyped wird bei Funktionstasten _nicht_ aufgerufen.



  • zu 1.:

    Das soll heißen, dass überhaupt keine KeyEvents gefeuert werden.

    zu 2.: ob mit oder ohne, es klappt bei beiden Versionen nicht

    zu 3.: Da sist doch egal. Eigentlich müsste trotzdem eine Ausgabe in der Konsole erscheinen, dass überhaupt ein Event gefeuert wurde. Es kommt aber keine...



  • Tipp am Rande:
    Nimm statt den Listener Klassen die dazugehörigen Adapterklassen. Dadurch fällt viel sinnloser Code weg.


Anmelden zum Antworten