In beinahe jedem Programm gibt es Tasten, die - egal wo sich der User gerade befindet - immer die selbe Aktion auslöst. Anstatt jeder Komponente jetzt einen KeyListener zu verpassen, geht es auch wesentlich eleganter.

Der KeyEventDispatcher

Der sogenannte KeyEventDispatcher arbeitet völlig unabhängig von einer Komponente und kann einfach um einen weiteren Dispatcher erweitert werden:

KeyboardFocusManager.getCurrentKeyboardFocusManager()
    .addKeyEventDispatcher( new KeyEventDispatcher()
    {
        @Override
        public boolean dispatchKeyEvent( KeyEvent e )
        {
            if (e.getID() == <KeyEvent>) //Hier muss die passende ID verglichen werden
            {
                if ( e.getKeyCode() == KeyEvent.VK_F3 )
                {
                    //Taste F3 Aktionen
                }
                if ( e.getKeyCode() == KeyEvent.VK_F1 )
                {
                    //Taste F1 Aktionen
                }
            }
            return false;
        }
    } );

Der Dispatcher wird grundsätzlich beim Tastendruck und -loslassen angesprochen. Will man also ein Event nur einmal starten (und nicht jeweils beim Drücken und wieder Loslassen) muss man die Id noch entsprechend abfragen. Die relevanten KeyEvent Konstanten sind:

  • KeyEvent.KEY_PRESSED
  • KeyEvent.KEY_RELEASED