Java Tutorial/Swing Event/KeyStroke

Материал из Java эксперт
Версия от 15:18, 31 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Activating a Keystroke When Any Child Component Has Focus

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component = new JButton();
    MyAction action = new MyAction();
    component.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
        KeyStroke.getKeyStroke("F2"), action.getValue(Action.NAME));
  }
}
class MyAction extends AbstractAction {
  public MyAction() {
    super("my action");
  }
  public void actionPerformed(ActionEvent e) {
    System.out.println("hi");
  }
}





Activating a Keystroke When Any Component in the Window Has Focus

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component = new JButton();
    MyAction action = new MyAction();
    component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F2"),
        action.getValue(Action.NAME));
  }
}
class MyAction extends AbstractAction {
  public MyAction() {
    super("my action");
  }
  public void actionPerformed(ActionEvent e) {
    System.out.println("hi");
  }
}





Bind a keystroke to shift-space

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) {
    JTextField component = new JTextField(10);
    
    component.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke("shift pressed SPACE"), "actionName");
    JFrame f = new JFrame();
    f.add(component);
    f.setSize(300, 300);
    f.setVisible(true);
  }
}





Converting a KeyStroke to a String

import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component = new JButton("button");
    InputMap map = component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    list(map, map.keys());
    list(map, map.allKeys());
  }
  static void list(InputMap map, KeyStroke[] keys) {
    if (keys == null) {
      return;
    }
    for (int i = 0; i < keys.length; i++) {
      keyStroke2String(keys[i]);
      while (map.get(keys[i]) == null) {
        map = map.getParent();
      }
      if (map.get(keys[i]) instanceof String) {
        String actionName = (String) map.get(keys[i]);
      } else {
        Action action = (Action) map.get(keys[i]);
      }
    }
  }
  static void keyStroke2String(KeyStroke key) {
    int m = key.getModifiers();
    if ((m & (InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK)) != 0) {
      System.out.println("shift ");
    }
    if ((m & (InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK)) != 0) {
      System.out.println("ctrl ");
    }
    if ((m & (InputEvent.META_DOWN_MASK | InputEvent.META_MASK)) != 0) {
      System.out.println("meta ");
    }
    if ((m & (InputEvent.ALT_DOWN_MASK | InputEvent.ALT_MASK)) != 0) {
      System.out.println("alt ");
    }
    if ((m & (InputEvent.BUTTON1_DOWN_MASK | InputEvent.BUTTON1_MASK)) != 0) {
      System.out.println("button1 ");
    }
    if ((m & (InputEvent.BUTTON2_DOWN_MASK | InputEvent.BUTTON2_MASK)) != 0) {
      System.out.println("button2 ");
    }
    if ((m & (InputEvent.BUTTON3_DOWN_MASK | InputEvent.BUTTON3_MASK)) != 0) {
      System.out.println("button3 ");
    }
    switch (key.getKeyEventType()) {
    case KeyEvent.KEY_TYPED:
      System.out.println("typed ");
      System.out.println(key.getKeyChar() + " ");
      break;
    case KeyEvent.KEY_PRESSED:
      System.out.println("pressed ");
      System.out.println(getKeyText(key.getKeyCode()) + " ");
      break;
    case KeyEvent.KEY_RELEASED:
      System.out.println("released ");
      System.out.println(getKeyText(key.getKeyCode()) + " ");
      break;
    default:
      System.out.println("unknown-event-type ");
      break;
    }
  }
  static String getKeyText(int keyCode) {
    if (keyCode >= KeyEvent.VK_0 && keyCode <= KeyEvent.VK_9 || keyCode >= KeyEvent.VK_A
        && keyCode <= KeyEvent.VK_Z) {
      return String.valueOf((char) keyCode);
    }
    switch (keyCode) {
    case KeyEvent.VK_COMMA:
      return "COMMA";
    case KeyEvent.VK_PERIOD:
      return "PERIOD";
    case KeyEvent.VK_SLASH:
      return "SLASH";
    case KeyEvent.VK_SEMICOLON:
      return "SEMICOLON";
    case KeyEvent.VK_EQUALS:
      return "EQUALS";
    case KeyEvent.VK_OPEN_BRACKET:
      return "OPEN_BRACKET";
    case KeyEvent.VK_BACK_SLASH:
      return "BACK_SLASH";
    case KeyEvent.VK_CLOSE_BRACKET:
      return "CLOSE_BRACKET";
    case KeyEvent.VK_ENTER:
      return "ENTER";
    case KeyEvent.VK_BACK_SPACE:
      return "BACK_SPACE";
    case KeyEvent.VK_TAB:
      return "TAB";
    case KeyEvent.VK_CANCEL:
      return "CANCEL";
    case KeyEvent.VK_CLEAR:
      return "CLEAR";
    case KeyEvent.VK_SHIFT:
      return "SHIFT";
    case KeyEvent.VK_CONTROL:
      return "CONTROL";
    case KeyEvent.VK_ALT:
      return "ALT";
    case KeyEvent.VK_PAUSE:
      return "PAUSE";
    case KeyEvent.VK_CAPS_LOCK:
      return "CAPS_LOCK";
    case KeyEvent.VK_ESCAPE:
      return "ESCAPE";
    case KeyEvent.VK_SPACE:
      return "SPACE";
    case KeyEvent.VK_PAGE_UP:
      return "PAGE_UP";
    case KeyEvent.VK_PAGE_DOWN:
      return "PAGE_DOWN";
    case KeyEvent.VK_END:
      return "END";
    case KeyEvent.VK_HOME:
      return "HOME";
    case KeyEvent.VK_LEFT:
      return "LEFT";
    case KeyEvent.VK_UP:
      return "UP";
    case KeyEvent.VK_RIGHT:
      return "RIGHT";
    case KeyEvent.VK_DOWN:
      return "DOWN";
    case KeyEvent.VK_MULTIPLY:
      return "MULTIPLY";
    case KeyEvent.VK_ADD:
      return "ADD";
    case KeyEvent.VK_SEPARATOR:
      return "SEPARATOR";
    case KeyEvent.VK_SUBTRACT:
      return "SUBTRACT";
    case KeyEvent.VK_DECIMAL:
      return "DECIMAL";
    case KeyEvent.VK_DIVIDE:
      return "DIVIDE";
    case KeyEvent.VK_DELETE:
      return "DELETE";
    case KeyEvent.VK_NUM_LOCK:
      return "NUM_LOCK";
    case KeyEvent.VK_SCROLL_LOCK:
      return "SCROLL_LOCK";
    case KeyEvent.VK_F1:
      return "F1";
    case KeyEvent.VK_F2:
      return "F2";
    case KeyEvent.VK_F3:
      return "F3";
    case KeyEvent.VK_F4:
      return "F4";
    case KeyEvent.VK_F5:
      return "F5";
    case KeyEvent.VK_F6:
      return "F6";
    case KeyEvent.VK_F7:
      return "F7";
    case KeyEvent.VK_F8:
      return "F8";
    case KeyEvent.VK_F9:
      return "F9";
    case KeyEvent.VK_F10:
      return "F10";
    case KeyEvent.VK_F11:
      return "F11";
    case KeyEvent.VK_F12:
      return "F12";
    case KeyEvent.VK_F13:
      return "F13";
    case KeyEvent.VK_F14:
      return "F14";
    case KeyEvent.VK_F15:
      return "F15";
    case KeyEvent.VK_F16:
      return "F16";
    case KeyEvent.VK_F17:
      return "F17";
    case KeyEvent.VK_F18:
      return "F18";
    case KeyEvent.VK_F19:
      return "F19";
    case KeyEvent.VK_F20:
      return "F20";
    case KeyEvent.VK_F21:
      return "F21";
    case KeyEvent.VK_F22:
      return "F22";
    case KeyEvent.VK_F23:
      return "F23";
    case KeyEvent.VK_F24:
      return "F24";
    case KeyEvent.VK_PRINTSCREEN:
      return "PRINTSCREEN";
    case KeyEvent.VK_INSERT:
      return "INSERT";
    case KeyEvent.VK_HELP:
      return "HELP";
    case KeyEvent.VK_META:
      return "META";
    case KeyEvent.VK_BACK_QUOTE:
      return "BACK_QUOTE";
    case KeyEvent.VK_QUOTE:
      return "QUOTE";
    case KeyEvent.VK_KP_UP:
      return "KP_UP";
    case KeyEvent.VK_KP_DOWN:
      return "KP_DOWN";
    case KeyEvent.VK_KP_LEFT:
      return "KP_LEFT";
    case KeyEvent.VK_KP_RIGHT:
      return "KP_RIGHT";
    case KeyEvent.VK_DEAD_GRAVE:
      return "DEAD_GRAVE";
    case KeyEvent.VK_DEAD_ACUTE:
      return "DEAD_ACUTE";
    case KeyEvent.VK_DEAD_CIRCUMFLEX:
      return "DEAD_CIRCUMFLEX";
    case KeyEvent.VK_DEAD_TILDE:
      return "DEAD_TILDE";
    case KeyEvent.VK_DEAD_MACRON:
      return "DEAD_MACRON";
    case KeyEvent.VK_DEAD_BREVE:
      return "DEAD_BREVE";
    case KeyEvent.VK_DEAD_ABOVEDOT:
      return "DEAD_ABOVEDOT";
    case KeyEvent.VK_DEAD_DIAERESIS:
      return "DEAD_DIAERESIS";
    case KeyEvent.VK_DEAD_ABOVERING:
      return "DEAD_ABOVERING";
    case KeyEvent.VK_DEAD_DOUBLEACUTE:
      return "DEAD_DOUBLEACUTE";
    case KeyEvent.VK_DEAD_CARON:
      return "DEAD_CARON";
    case KeyEvent.VK_DEAD_CEDILLA:
      return "DEAD_CEDILLA";
    case KeyEvent.VK_DEAD_OGONEK:
      return "DEAD_OGONEK";
    case KeyEvent.VK_DEAD_IOTA:
      return "DEAD_IOTA";
    case KeyEvent.VK_DEAD_VOICED_SOUND:
      return "DEAD_VOICED_SOUND";
    case KeyEvent.VK_DEAD_SEMIVOICED_SOUND:
      return "DEAD_SEMIVOICED_SOUND";
    case KeyEvent.VK_AMPERSAND:
      return "AMPERSAND";
    case KeyEvent.VK_ASTERISK:
      return "ASTERISK";
    case KeyEvent.VK_QUOTEDBL:
      return "QUOTEDBL";
    case KeyEvent.VK_LESS:
      return "LESS";
    case KeyEvent.VK_GREATER:
      return "GREATER";
    case KeyEvent.VK_BRACELEFT:
      return "BRACELEFT";
    case KeyEvent.VK_BRACERIGHT:
      return "BRACERIGHT";
    case KeyEvent.VK_AT:
      return "AT";
    case KeyEvent.VK_COLON:
      return "COLON";
    case KeyEvent.VK_CIRCUMFLEX:
      return "CIRCUMFLEX";
    case KeyEvent.VK_DOLLAR:
      return "DOLLAR";
    case KeyEvent.VK_EURO_SIGN:
      return "EURO_SIGN";
    case KeyEvent.VK_EXCLAMATION_MARK:
      return "EXCLAMATION_MARK";
    case KeyEvent.VK_INVERTED_EXCLAMATION_MARK:
      return "INVERTED_EXCLAMATION_MARK";
    case KeyEvent.VK_LEFT_PARENTHESIS:
      return "LEFT_PARENTHESIS";
    case KeyEvent.VK_NUMBER_SIGN:
      return "NUMBER_SIGN";
    case KeyEvent.VK_MINUS:
      return "MINUS";
    case KeyEvent.VK_PLUS:
      return "PLUS";
    case KeyEvent.VK_RIGHT_PARENTHESIS:
      return "RIGHT_PARENTHESIS";
    case KeyEvent.VK_UNDERSCORE:
      return "UNDERSCORE";
    case KeyEvent.VK_FINAL:
      return "FINAL";
    case KeyEvent.VK_CONVERT:
      return "CONVERT";
    case KeyEvent.VK_NONCONVERT:
      return "NONCONVERT";
    case KeyEvent.VK_ACCEPT:
      return "ACCEPT";
    case KeyEvent.VK_MODECHANGE:
      return "MODECHANGE";
    case KeyEvent.VK_KANA:
      return "KANA";
    case KeyEvent.VK_KANJI:
      return "KANJI";
    case KeyEvent.VK_ALPHANUMERIC:
      return "ALPHANUMERIC";
    case KeyEvent.VK_KATAKANA:
      return "KATAKANA";
    case KeyEvent.VK_HIRAGANA:
      return "HIRAGANA";
    case KeyEvent.VK_FULL_WIDTH:
      return "FULL_WIDTH";
    case KeyEvent.VK_HALF_WIDTH:
      return "HALF_WIDTH";
    case KeyEvent.VK_ROMAN_CHARACTERS:
      return "ROMAN_CHARACTERS";
    case KeyEvent.VK_ALL_CANDIDATES:
      return "ALL_CANDIDATES";
    case KeyEvent.VK_PREVIOUS_CANDIDATE:
      return "PREVIOUS_CANDIDATE";
    case KeyEvent.VK_CODE_INPUT:
      return "CODE_INPUT";
    case KeyEvent.VK_JAPANESE_KATAKANA:
      return "JAPANESE_KATAKANA";
    case KeyEvent.VK_JAPANESE_HIRAGANA:
      return "JAPANESE_HIRAGANA";
    case KeyEvent.VK_JAPANESE_ROMAN:
      return "JAPANESE_ROMAN";
    case KeyEvent.VK_KANA_LOCK:
      return "KANA_LOCK";
    case KeyEvent.VK_INPUT_METHOD_ON_OFF:
      return "INPUT_METHOD_ON_OFF";
    case KeyEvent.VK_AGAIN:
      return "AGAIN";
    case KeyEvent.VK_UNDO:
      return "UNDO";
    case KeyEvent.VK_COPY:
      return "COPY";
    case KeyEvent.VK_PASTE:
      return "PASTE";
    case KeyEvent.VK_CUT:
      return "CUT";
    case KeyEvent.VK_FIND:
      return "FIND";
    case KeyEvent.VK_PROPS:
      return "PROPS";
    case KeyEvent.VK_STOP:
      return "STOP";
    case KeyEvent.VK_COMPOSE:
      return "COMPOSE";
    case KeyEvent.VK_ALT_GRAPH:
      return "ALT_GRAPH";
    }
    if (keyCode >= KeyEvent.VK_NUMPAD0 && keyCode <= KeyEvent.VK_NUMPAD9) {
      char c = (char) (keyCode - KeyEvent.VK_NUMPAD0 + "0");
      return "NUMPAD" + c;
    }
    return "unknown(0x" + Integer.toString(keyCode, 16) + ")";
  }
}





Creating a KeyStroke

KeyStroke space = KeyStroke.getKeyStroke("Z");
   
   KeyStroke fromKeyEvent = KeyStroke.getKeyStrokeForEvent(keyEvent);





Creating a KeyStroke and Binding It to an Action

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component = new JButton("Button");
    component.getInputMap().put(KeyStroke.getKeyStroke("F2"), "actionName");
    component.getInputMap().put(KeyStroke.getKeyStroke("control A"), "actionName");
    component.getInputMap().put(KeyStroke.getKeyStroke("shift F2"), "actionName");
    component.getInputMap().put(KeyStroke.getKeyStroke("("), "actionName");
    component.getInputMap().put(KeyStroke.getKeyStroke("button3 F"), "actionName");
    component.getInputMap().put(KeyStroke.getKeyStroke("typed x"), "actionName");
    component.getInputMap().put(KeyStroke.getKeyStroke("released DELETE"), "actionName");
    component.getInputMap().put(KeyStroke.getKeyStroke("shift UP"), "actionName");
    component.getActionMap().put("actionName", new AbstractAction("actionName") {
      public void actionPerformed(ActionEvent evt) {
        System.out.println(evt);
      }
    });
  }
}





Get Key Text

/*
 * Copyright 2000,2005 wingS development team.
 *
 * This file is part of wingS (http://wingsframework.org).
 *
 * wingS is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2.1
 * of the License, or (at your option) any later version.
 *
 * Please see COPYING for the complete licence.
 */

import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.KeyStroke;
/**
 * This source code was taken from a code example at http://javaalmanac.ru/
 * and slightly altered to fit our purpose.
 * @author ole
 *
 */
public class KeystrokeUtil {
    public static String keyStroke2String(KeyStroke key) {
        if (key == null) return "";
        StringBuilder s = new StringBuilder(50);
        int m = key.getModifiers();
        if ((m & (InputEvent.CTRL_DOWN_MASK|InputEvent.CTRL_MASK)) != 0) {
            s.append("Ctrl+");
        }
        if ((m & (InputEvent.META_DOWN_MASK|InputEvent.META_MASK)) != 0) {
            s.append("Meta+");
        }
        if ((m & (InputEvent.ALT_DOWN_MASK|InputEvent.ALT_MASK)) != 0) {
            s.append("Alt+");
        }
        if ((m & (InputEvent.SHIFT_DOWN_MASK|InputEvent.SHIFT_MASK)) != 0) {
            s.append("Shift+");
        }
        if ((m & (InputEvent.BUTTON1_DOWN_MASK|InputEvent.BUTTON1_MASK)) != 0) {
            s.append("Button1+");
        }
        if ((m & (InputEvent.BUTTON2_DOWN_MASK|InputEvent.BUTTON2_MASK)) != 0) {
            s.append("Button2+");
        }
        if ((m & (InputEvent.BUTTON3_DOWN_MASK|InputEvent.BUTTON3_MASK)) != 0) {
            s.append("Button3+");
        }
        switch (key.getKeyEventType()) {
        case KeyEvent.KEY_TYPED:
            s.append(key.getKeyChar() + " ");
            break;
        case KeyEvent.KEY_PRESSED:
        case KeyEvent.KEY_RELEASED:
            s.append(getKeyText(key.getKeyCode()) + " ");
            break;
        default:
            s.append("unknown-event-type ");
            break;
        }
        return s.toString();
    }
    public static String getKeyText(int keyCode) {
        if (keyCode >= KeyEvent.VK_0 && keyCode <= KeyEvent.VK_9 ||
            keyCode >= KeyEvent.VK_A && keyCode <= KeyEvent.VK_Z) {
            return String.valueOf((char)keyCode);
        }
        switch(keyCode) {
          case KeyEvent.VK_COMMA: return "COMMA";
          case KeyEvent.VK_PERIOD: return "PERIOD";
          case KeyEvent.VK_SLASH: return "SLASH";
          case KeyEvent.VK_SEMICOLON: return "SEMICOLON";
          case KeyEvent.VK_EQUALS: return "EQUALS";
          case KeyEvent.VK_OPEN_BRACKET: return "OPEN_BRACKET";
          case KeyEvent.VK_BACK_SLASH: return "BACK_SLASH";
          case KeyEvent.VK_CLOSE_BRACKET: return "CLOSE_BRACKET";
          case KeyEvent.VK_ENTER: return "ENTER";
          case KeyEvent.VK_BACK_SPACE: return "BACK_SPACE";
          case KeyEvent.VK_TAB: return "TAB";
          case KeyEvent.VK_CANCEL: return "CANCEL";
          case KeyEvent.VK_CLEAR: return "CLEAR";
          case KeyEvent.VK_SHIFT: return "SHIFT";
          case KeyEvent.VK_CONTROL: return "CONTROL";
          case KeyEvent.VK_ALT: return "ALT";
          case KeyEvent.VK_PAUSE: return "PAUSE";
          case KeyEvent.VK_CAPS_LOCK: return "CAPS_LOCK";
          case KeyEvent.VK_ESCAPE: return "ESCAPE";
          case KeyEvent.VK_SPACE: return "SPACE";
          case KeyEvent.VK_PAGE_UP: return "PAGE_UP";
          case KeyEvent.VK_PAGE_DOWN: return "PAGE_DOWN";
          case KeyEvent.VK_END: return "END";
          case KeyEvent.VK_HOME: return "HOME";
          case KeyEvent.VK_LEFT: return "LEFT";
          case KeyEvent.VK_UP: return "UP";
          case KeyEvent.VK_RIGHT: return "RIGHT";
          case KeyEvent.VK_DOWN: return "DOWN";
          // numpad numeric keys handled below
          case KeyEvent.VK_MULTIPLY: return "MULTIPLY";
          case KeyEvent.VK_ADD: return "ADD";
          case KeyEvent.VK_SEPARATOR: return "SEPARATOR";
          case KeyEvent.VK_SUBTRACT: return "SUBTRACT";
          case KeyEvent.VK_DECIMAL: return "DECIMAL";
          case KeyEvent.VK_DIVIDE: return "DIVIDE";
          case KeyEvent.VK_DELETE: return "DELETE";
          case KeyEvent.VK_NUM_LOCK: return "NUM_LOCK";
          case KeyEvent.VK_SCROLL_LOCK: return "SCROLL_LOCK";
          case KeyEvent.VK_F1: return "F1";
          case KeyEvent.VK_F2: return "F2";
          case KeyEvent.VK_F3: return "F3";
          case KeyEvent.VK_F4: return "F4";
          case KeyEvent.VK_F5: return "F5";
          case KeyEvent.VK_F6: return "F6";
          case KeyEvent.VK_F7: return "F7";
          case KeyEvent.VK_F8: return "F8";
          case KeyEvent.VK_F9: return "F9";
          case KeyEvent.VK_F10: return "F10";
          case KeyEvent.VK_F11: return "F11";
          case KeyEvent.VK_F12: return "F12";
          case KeyEvent.VK_F13: return "F13";
          case KeyEvent.VK_F14: return "F14";
          case KeyEvent.VK_F15: return "F15";
          case KeyEvent.VK_F16: return "F16";
          case KeyEvent.VK_F17: return "F17";
          case KeyEvent.VK_F18: return "F18";
          case KeyEvent.VK_F19: return "F19";
          case KeyEvent.VK_F20: return "F20";
          case KeyEvent.VK_F21: return "F21";
          case KeyEvent.VK_F22: return "F22";
          case KeyEvent.VK_F23: return "F23";
          case KeyEvent.VK_F24: return "F24";
          case KeyEvent.VK_PRINTSCREEN: return "PRINTSCREEN";
          case KeyEvent.VK_INSERT: return "INSERT";
          case KeyEvent.VK_HELP: return "HELP";
          case KeyEvent.VK_META: return "META";
          case KeyEvent.VK_BACK_QUOTE: return "BACK_QUOTE";
          case KeyEvent.VK_QUOTE: return "QUOTE";
          case KeyEvent.VK_KP_UP: return "KP_UP";
          case KeyEvent.VK_KP_DOWN: return "KP_DOWN";
          case KeyEvent.VK_KP_LEFT: return "KP_LEFT";
          case KeyEvent.VK_KP_RIGHT: return "KP_RIGHT";
          case KeyEvent.VK_DEAD_GRAVE: return "DEAD_GRAVE";
          case KeyEvent.VK_DEAD_ACUTE: return "DEAD_ACUTE";
          case KeyEvent.VK_DEAD_CIRCUMFLEX: return "DEAD_CIRCUMFLEX";
          case KeyEvent.VK_DEAD_TILDE: return "DEAD_TILDE";
          case KeyEvent.VK_DEAD_MACRON: return "DEAD_MACRON";
          case KeyEvent.VK_DEAD_BREVE: return "DEAD_BREVE";
          case KeyEvent.VK_DEAD_ABOVEDOT: return "DEAD_ABOVEDOT";
          case KeyEvent.VK_DEAD_DIAERESIS: return "DEAD_DIAERESIS";
          case KeyEvent.VK_DEAD_ABOVERING: return "DEAD_ABOVERING";
          case KeyEvent.VK_DEAD_DOUBLEACUTE: return "DEAD_DOUBLEACUTE";
          case KeyEvent.VK_DEAD_CARON: return "DEAD_CARON";
          case KeyEvent.VK_DEAD_CEDILLA: return "DEAD_CEDILLA";
          case KeyEvent.VK_DEAD_OGONEK: return "DEAD_OGONEK";
          case KeyEvent.VK_DEAD_IOTA: return "DEAD_IOTA";
          case KeyEvent.VK_DEAD_VOICED_SOUND: return "DEAD_VOICED_SOUND";
          case KeyEvent.VK_DEAD_SEMIVOICED_SOUND: return "DEAD_SEMIVOICED_SOUND";
          case KeyEvent.VK_AMPERSAND: return "AMPERSAND";
          case KeyEvent.VK_ASTERISK: return "ASTERISK";
          case KeyEvent.VK_QUOTEDBL: return "QUOTEDBL";
          case KeyEvent.VK_LESS: return "LESS";
          case KeyEvent.VK_GREATER: return "GREATER";
          case KeyEvent.VK_BRACELEFT: return "BRACELEFT";
          case KeyEvent.VK_BRACERIGHT: return "BRACERIGHT";
          case KeyEvent.VK_AT: return "AT";
          case KeyEvent.VK_COLON: return "COLON";
          case KeyEvent.VK_CIRCUMFLEX: return "CIRCUMFLEX";
          case KeyEvent.VK_DOLLAR: return "DOLLAR";
          case KeyEvent.VK_EURO_SIGN: return "EURO_SIGN";
          case KeyEvent.VK_EXCLAMATION_MARK: return "EXCLAMATION_MARK";
          case KeyEvent.VK_INVERTED_EXCLAMATION_MARK:
                   return "INVERTED_EXCLAMATION_MARK";
          case KeyEvent.VK_LEFT_PARENTHESIS: return "LEFT_PARENTHESIS";
          case KeyEvent.VK_NUMBER_SIGN: return "NUMBER_SIGN";
          case KeyEvent.VK_MINUS: return "MINUS";
          case KeyEvent.VK_PLUS: return "PLUS";
          case KeyEvent.VK_RIGHT_PARENTHESIS: return "RIGHT_PARENTHESIS";
          case KeyEvent.VK_UNDERSCORE: return "UNDERSCORE";
          case KeyEvent.VK_FINAL: return "FINAL";
          case KeyEvent.VK_CONVERT: return "CONVERT";
          case KeyEvent.VK_NONCONVERT: return "NONCONVERT";
          case KeyEvent.VK_ACCEPT: return "ACCEPT";
          case KeyEvent.VK_MODECHANGE: return "MODECHANGE";
          case KeyEvent.VK_KANA: return "KANA";
          case KeyEvent.VK_KANJI: return "KANJI";
          case KeyEvent.VK_ALPHANUMERIC: return "ALPHANUMERIC";
          case KeyEvent.VK_KATAKANA: return "KATAKANA";
          case KeyEvent.VK_HIRAGANA: return "HIRAGANA";
          case KeyEvent.VK_FULL_WIDTH: return "FULL_WIDTH";
          case KeyEvent.VK_HALF_WIDTH: return "HALF_WIDTH";
          case KeyEvent.VK_ROMAN_CHARACTERS: return "ROMAN_CHARACTERS";
          case KeyEvent.VK_ALL_CANDIDATES: return "ALL_CANDIDATES";
          case KeyEvent.VK_PREVIOUS_CANDIDATE: return "PREVIOUS_CANDIDATE";
          case KeyEvent.VK_CODE_INPUT: return "CODE_INPUT";
          case KeyEvent.VK_JAPANESE_KATAKANA: return "JAPANESE_KATAKANA";
          case KeyEvent.VK_JAPANESE_HIRAGANA: return "JAPANESE_HIRAGANA";
          case KeyEvent.VK_JAPANESE_ROMAN: return "JAPANESE_ROMAN";
          case KeyEvent.VK_KANA_LOCK: return "KANA_LOCK";
          case KeyEvent.VK_INPUT_METHOD_ON_OFF: return "INPUT_METHOD_ON_OFF";
          case KeyEvent.VK_AGAIN: return "AGAIN";
          case KeyEvent.VK_UNDO: return "UNDO";
          case KeyEvent.VK_COPY: return "COPY";
          case KeyEvent.VK_PASTE: return "PASTE";
          case KeyEvent.VK_CUT: return "CUT";
          case KeyEvent.VK_FIND: return "FIND";
          case KeyEvent.VK_PROPS: return "PROPS";
          case KeyEvent.VK_STOP: return "STOP";
          case KeyEvent.VK_COMPOSE: return "COMPOSE";
          case KeyEvent.VK_ALT_GRAPH: return "ALT_GRAPH";
        }
        if (keyCode >= KeyEvent.VK_NUMPAD0 && keyCode <= KeyEvent.VK_NUMPAD9) {
            char c = (char)(keyCode - KeyEvent.VK_NUMPAD0 + "0");
            return "NUMPAD"+c;
        }
        return "unknown(0x" + Integer.toString(keyCode, 16) + ")";
    }
}





KeyStroke Class

ConstantDescriptionWHEN_FOCUSEDActivates the keystroke when the actual component has the input focusWHEN_IN_FOCUSED_WINDOWActivates the keystroke when the window that the component is in has the input focusWHEN_ANCESTOR_OF_FOCUSED_COMPONENTActivates the keystroke when pressed in the component or a container of the componentUNDEFINED_CONDITIONFor when no condition is defined


KeyStroke.getKeyStroke("F2")

import java.awt.KeyboardFocusManager;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JButton;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component = new JButton("a");
    Set set = new HashSet(component
        .getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
    set.add(KeyStroke.getKeyStroke("F2"));
    component.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, set);
  }
}





KeyStroke Sample: function key and Shift key

import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
public class KeyStrokeSampleVKF4Shift {
  public static void main(String[] a) {
    String ACTION_KEY = "theAction";
    JFrame frame = new JFrame("KeyStroke Sample");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton buttonA = new JButton("<html><center>ANCESTOR<br>VK_F4+SHIFT_MASK");
    Action actionListener = new AbstractAction() {
      public void actionPerformed(ActionEvent actionEvent) {
        JButton source = (JButton) actionEvent.getSource();
        System.out.println(source.getText());
      }
    };
    KeyStroke shiftF4 = KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.SHIFT_MASK);
    InputMap inputMap = buttonA.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    inputMap.put(shiftF4, ACTION_KEY);
    ActionMap actionMap = buttonA.getActionMap();
    actionMap.put(ACTION_KEY, actionListener);
    buttonA.setActionMap(actionMap);
    frame.add(buttonA);
    frame.setSize(400, 200);
    frame.setVisible(true);
  }
}





KeyStroke Sample: Space key

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
public class KeyStrokeSampleSpace {
  public static void main(String[] a) {
    String ACTION_KEY = "theAction";
    JFrame frame = new JFrame("KeyStroke Sample");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton buttonA = new JButton("<html><center>WINDOW<br>" "");
    Action actionListener = new AbstractAction() {
      public void actionPerformed(ActionEvent actionEvent) {
        JButton source = (JButton) actionEvent.getSource();
        System.out.println(source.getText());
      }
    };
    KeyStroke space = KeyStroke.getKeyStroke(" ");
    InputMap inputMap = buttonA.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    inputMap.put(space, ACTION_KEY);
    ActionMap actionMap = buttonA.getActionMap();
    actionMap.put(ACTION_KEY, actionListener);
    buttonA.setActionMap(actionMap);
    frame.add(buttonA);
    frame.setSize(400, 200);
    frame.setVisible(true);
  }
}





KeyStroke Sample: VKEnter

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
public class KeyStrokeSampleVKEnter {
  public static void main(String[] a) {
    String ACTION_KEY = "theAction";
    JFrame frame = new JFrame("KeyStroke Sample");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton buttonA = new JButton("<html><center>FOCUS/RELEASE<br>VK_ENTER");
    Action actionListener = new AbstractAction() {
      public void actionPerformed(ActionEvent actionEvent) {
        JButton source = (JButton) actionEvent.getSource();
        System.out.println(source.getText());
      }
    };
    KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, true);
    InputMap inputMap = buttonA.getInputMap();
    inputMap.put(enter, ACTION_KEY);
    ActionMap actionMap = buttonA.getActionMap();
    actionMap.put(ACTION_KEY, actionListener);
    buttonA.setActionMap(actionMap);
    frame.add(buttonA);
    frame.setSize(400, 200);
    frame.setVisible(true);
  }
}





KeyStroke to String

/*
 * Copyright 2000,2005 wingS development team.
 *
 * This file is part of wingS (http://wingsframework.org).
 *
 * wingS is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2.1
 * of the License, or (at your option) any later version.
 *
 * Please see COPYING for the complete licence.
 */

import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.KeyStroke;
/**
 * This source code was taken from a code example at http://javaalmanac.ru/
 * and slightly altered to fit our purpose.
 * @author ole
 *
 */
public class KeystrokeUtil {
    public static String keyStroke2String(KeyStroke key) {
        if (key == null) return "";
        StringBuilder s = new StringBuilder(50);
        int m = key.getModifiers();
        if ((m & (InputEvent.CTRL_DOWN_MASK|InputEvent.CTRL_MASK)) != 0) {
            s.append("Ctrl+");
        }
        if ((m & (InputEvent.META_DOWN_MASK|InputEvent.META_MASK)) != 0) {
            s.append("Meta+");
        }
        if ((m & (InputEvent.ALT_DOWN_MASK|InputEvent.ALT_MASK)) != 0) {
            s.append("Alt+");
        }
        if ((m & (InputEvent.SHIFT_DOWN_MASK|InputEvent.SHIFT_MASK)) != 0) {
            s.append("Shift+");
        }
        if ((m & (InputEvent.BUTTON1_DOWN_MASK|InputEvent.BUTTON1_MASK)) != 0) {
            s.append("Button1+");
        }
        if ((m & (InputEvent.BUTTON2_DOWN_MASK|InputEvent.BUTTON2_MASK)) != 0) {
            s.append("Button2+");
        }
        if ((m & (InputEvent.BUTTON3_DOWN_MASK|InputEvent.BUTTON3_MASK)) != 0) {
            s.append("Button3+");
        }
        switch (key.getKeyEventType()) {
        case KeyEvent.KEY_TYPED:
            s.append(key.getKeyChar() + " ");
            break;
        case KeyEvent.KEY_PRESSED:
        case KeyEvent.KEY_RELEASED:
            s.append(getKeyText(key.getKeyCode()) + " ");
            break;
        default:
            s.append("unknown-event-type ");
            break;
        }
        return s.toString();
    }
    public static String getKeyText(int keyCode) {
        if (keyCode >= KeyEvent.VK_0 && keyCode <= KeyEvent.VK_9 ||
            keyCode >= KeyEvent.VK_A && keyCode <= KeyEvent.VK_Z) {
            return String.valueOf((char)keyCode);
        }
        switch(keyCode) {
          case KeyEvent.VK_COMMA: return "COMMA";
          case KeyEvent.VK_PERIOD: return "PERIOD";
          case KeyEvent.VK_SLASH: return "SLASH";
          case KeyEvent.VK_SEMICOLON: return "SEMICOLON";
          case KeyEvent.VK_EQUALS: return "EQUALS";
          case KeyEvent.VK_OPEN_BRACKET: return "OPEN_BRACKET";
          case KeyEvent.VK_BACK_SLASH: return "BACK_SLASH";
          case KeyEvent.VK_CLOSE_BRACKET: return "CLOSE_BRACKET";
          case KeyEvent.VK_ENTER: return "ENTER";
          case KeyEvent.VK_BACK_SPACE: return "BACK_SPACE";
          case KeyEvent.VK_TAB: return "TAB";
          case KeyEvent.VK_CANCEL: return "CANCEL";
          case KeyEvent.VK_CLEAR: return "CLEAR";
          case KeyEvent.VK_SHIFT: return "SHIFT";
          case KeyEvent.VK_CONTROL: return "CONTROL";
          case KeyEvent.VK_ALT: return "ALT";
          case KeyEvent.VK_PAUSE: return "PAUSE";
          case KeyEvent.VK_CAPS_LOCK: return "CAPS_LOCK";
          case KeyEvent.VK_ESCAPE: return "ESCAPE";
          case KeyEvent.VK_SPACE: return "SPACE";
          case KeyEvent.VK_PAGE_UP: return "PAGE_UP";
          case KeyEvent.VK_PAGE_DOWN: return "PAGE_DOWN";
          case KeyEvent.VK_END: return "END";
          case KeyEvent.VK_HOME: return "HOME";
          case KeyEvent.VK_LEFT: return "LEFT";
          case KeyEvent.VK_UP: return "UP";
          case KeyEvent.VK_RIGHT: return "RIGHT";
          case KeyEvent.VK_DOWN: return "DOWN";
          // numpad numeric keys handled below
          case KeyEvent.VK_MULTIPLY: return "MULTIPLY";
          case KeyEvent.VK_ADD: return "ADD";
          case KeyEvent.VK_SEPARATOR: return "SEPARATOR";
          case KeyEvent.VK_SUBTRACT: return "SUBTRACT";
          case KeyEvent.VK_DECIMAL: return "DECIMAL";
          case KeyEvent.VK_DIVIDE: return "DIVIDE";
          case KeyEvent.VK_DELETE: return "DELETE";
          case KeyEvent.VK_NUM_LOCK: return "NUM_LOCK";
          case KeyEvent.VK_SCROLL_LOCK: return "SCROLL_LOCK";
          case KeyEvent.VK_F1: return "F1";
          case KeyEvent.VK_F2: return "F2";
          case KeyEvent.VK_F3: return "F3";
          case KeyEvent.VK_F4: return "F4";
          case KeyEvent.VK_F5: return "F5";
          case KeyEvent.VK_F6: return "F6";
          case KeyEvent.VK_F7: return "F7";
          case KeyEvent.VK_F8: return "F8";
          case KeyEvent.VK_F9: return "F9";
          case KeyEvent.VK_F10: return "F10";
          case KeyEvent.VK_F11: return "F11";
          case KeyEvent.VK_F12: return "F12";
          case KeyEvent.VK_F13: return "F13";
          case KeyEvent.VK_F14: return "F14";
          case KeyEvent.VK_F15: return "F15";
          case KeyEvent.VK_F16: return "F16";
          case KeyEvent.VK_F17: return "F17";
          case KeyEvent.VK_F18: return "F18";
          case KeyEvent.VK_F19: return "F19";
          case KeyEvent.VK_F20: return "F20";
          case KeyEvent.VK_F21: return "F21";
          case KeyEvent.VK_F22: return "F22";
          case KeyEvent.VK_F23: return "F23";
          case KeyEvent.VK_F24: return "F24";
          case KeyEvent.VK_PRINTSCREEN: return "PRINTSCREEN";
          case KeyEvent.VK_INSERT: return "INSERT";
          case KeyEvent.VK_HELP: return "HELP";
          case KeyEvent.VK_META: return "META";
          case KeyEvent.VK_BACK_QUOTE: return "BACK_QUOTE";
          case KeyEvent.VK_QUOTE: return "QUOTE";
          case KeyEvent.VK_KP_UP: return "KP_UP";
          case KeyEvent.VK_KP_DOWN: return "KP_DOWN";
          case KeyEvent.VK_KP_LEFT: return "KP_LEFT";
          case KeyEvent.VK_KP_RIGHT: return "KP_RIGHT";
          case KeyEvent.VK_DEAD_GRAVE: return "DEAD_GRAVE";
          case KeyEvent.VK_DEAD_ACUTE: return "DEAD_ACUTE";
          case KeyEvent.VK_DEAD_CIRCUMFLEX: return "DEAD_CIRCUMFLEX";
          case KeyEvent.VK_DEAD_TILDE: return "DEAD_TILDE";
          case KeyEvent.VK_DEAD_MACRON: return "DEAD_MACRON";
          case KeyEvent.VK_DEAD_BREVE: return "DEAD_BREVE";
          case KeyEvent.VK_DEAD_ABOVEDOT: return "DEAD_ABOVEDOT";
          case KeyEvent.VK_DEAD_DIAERESIS: return "DEAD_DIAERESIS";
          case KeyEvent.VK_DEAD_ABOVERING: return "DEAD_ABOVERING";
          case KeyEvent.VK_DEAD_DOUBLEACUTE: return "DEAD_DOUBLEACUTE";
          case KeyEvent.VK_DEAD_CARON: return "DEAD_CARON";
          case KeyEvent.VK_DEAD_CEDILLA: return "DEAD_CEDILLA";
          case KeyEvent.VK_DEAD_OGONEK: return "DEAD_OGONEK";
          case KeyEvent.VK_DEAD_IOTA: return "DEAD_IOTA";
          case KeyEvent.VK_DEAD_VOICED_SOUND: return "DEAD_VOICED_SOUND";
          case KeyEvent.VK_DEAD_SEMIVOICED_SOUND: return "DEAD_SEMIVOICED_SOUND";
          case KeyEvent.VK_AMPERSAND: return "AMPERSAND";
          case KeyEvent.VK_ASTERISK: return "ASTERISK";
          case KeyEvent.VK_QUOTEDBL: return "QUOTEDBL";
          case KeyEvent.VK_LESS: return "LESS";
          case KeyEvent.VK_GREATER: return "GREATER";
          case KeyEvent.VK_BRACELEFT: return "BRACELEFT";
          case KeyEvent.VK_BRACERIGHT: return "BRACERIGHT";
          case KeyEvent.VK_AT: return "AT";
          case KeyEvent.VK_COLON: return "COLON";
          case KeyEvent.VK_CIRCUMFLEX: return "CIRCUMFLEX";
          case KeyEvent.VK_DOLLAR: return "DOLLAR";
          case KeyEvent.VK_EURO_SIGN: return "EURO_SIGN";
          case KeyEvent.VK_EXCLAMATION_MARK: return "EXCLAMATION_MARK";
          case KeyEvent.VK_INVERTED_EXCLAMATION_MARK:
                   return "INVERTED_EXCLAMATION_MARK";
          case KeyEvent.VK_LEFT_PARENTHESIS: return "LEFT_PARENTHESIS";
          case KeyEvent.VK_NUMBER_SIGN: return "NUMBER_SIGN";
          case KeyEvent.VK_MINUS: return "MINUS";
          case KeyEvent.VK_PLUS: return "PLUS";
          case KeyEvent.VK_RIGHT_PARENTHESIS: return "RIGHT_PARENTHESIS";
          case KeyEvent.VK_UNDERSCORE: return "UNDERSCORE";
          case KeyEvent.VK_FINAL: return "FINAL";
          case KeyEvent.VK_CONVERT: return "CONVERT";
          case KeyEvent.VK_NONCONVERT: return "NONCONVERT";
          case KeyEvent.VK_ACCEPT: return "ACCEPT";
          case KeyEvent.VK_MODECHANGE: return "MODECHANGE";
          case KeyEvent.VK_KANA: return "KANA";
          case KeyEvent.VK_KANJI: return "KANJI";
          case KeyEvent.VK_ALPHANUMERIC: return "ALPHANUMERIC";
          case KeyEvent.VK_KATAKANA: return "KATAKANA";
          case KeyEvent.VK_HIRAGANA: return "HIRAGANA";
          case KeyEvent.VK_FULL_WIDTH: return "FULL_WIDTH";
          case KeyEvent.VK_HALF_WIDTH: return "HALF_WIDTH";
          case KeyEvent.VK_ROMAN_CHARACTERS: return "ROMAN_CHARACTERS";
          case KeyEvent.VK_ALL_CANDIDATES: return "ALL_CANDIDATES";
          case KeyEvent.VK_PREVIOUS_CANDIDATE: return "PREVIOUS_CANDIDATE";
          case KeyEvent.VK_CODE_INPUT: return "CODE_INPUT";
          case KeyEvent.VK_JAPANESE_KATAKANA: return "JAPANESE_KATAKANA";
          case KeyEvent.VK_JAPANESE_HIRAGANA: return "JAPANESE_HIRAGANA";
          case KeyEvent.VK_JAPANESE_ROMAN: return "JAPANESE_ROMAN";
          case KeyEvent.VK_KANA_LOCK: return "KANA_LOCK";
          case KeyEvent.VK_INPUT_METHOD_ON_OFF: return "INPUT_METHOD_ON_OFF";
          case KeyEvent.VK_AGAIN: return "AGAIN";
          case KeyEvent.VK_UNDO: return "UNDO";
          case KeyEvent.VK_COPY: return "COPY";
          case KeyEvent.VK_PASTE: return "PASTE";
          case KeyEvent.VK_CUT: return "CUT";
          case KeyEvent.VK_FIND: return "FIND";
          case KeyEvent.VK_PROPS: return "PROPS";
          case KeyEvent.VK_STOP: return "STOP";
          case KeyEvent.VK_COMPOSE: return "COMPOSE";
          case KeyEvent.VK_ALT_GRAPH: return "ALT_GRAPH";
        }
        if (keyCode >= KeyEvent.VK_NUMPAD0 && keyCode <= KeyEvent.VK_NUMPAD9) {
            char c = (char)(keyCode - KeyEvent.VK_NUMPAD0 + "0");
            return "NUMPAD"+c;
        }
        return "unknown(0x" + Integer.toString(keyCode, 16) + ")";
    }
}





List keystrokes in the WHEN_ANCESTOR_OF_FOCUSED_COMPONENT input map of the component

import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component = new JButton();
    InputMap map = component.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    list(map, map.keys());
    list(map, map.allKeys());
  }
  static void list(InputMap map, KeyStroke[] keys) {
    if (keys == null) {
      return;
    }
    for (int i = 0; i < keys.length; i++) {
      keyStroke2String(keys[i]);
      while (map.get(keys[i]) == null) {
        map = map.getParent();
      }
      if (map.get(keys[i]) instanceof String) {
        String actionName = (String) map.get(keys[i]);
      } else {
        Action action = (Action) map.get(keys[i]);
      }
    }
  }
  static void keyStroke2String(KeyStroke key) {
    int m = key.getModifiers();
    if ((m & (InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK)) != 0) {
      System.out.println("shift ");
    }
    if ((m & (InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK)) != 0) {
      System.out.println("ctrl ");
    }
    if ((m & (InputEvent.META_DOWN_MASK | InputEvent.META_MASK)) != 0) {
      System.out.println("meta ");
    }
    if ((m & (InputEvent.ALT_DOWN_MASK | InputEvent.ALT_MASK)) != 0) {
      System.out.println("alt ");
    }
    if ((m & (InputEvent.BUTTON1_DOWN_MASK | InputEvent.BUTTON1_MASK)) != 0) {
      System.out.println("button1 ");
    }
    if ((m & (InputEvent.BUTTON2_DOWN_MASK | InputEvent.BUTTON2_MASK)) != 0) {
      System.out.println("button2 ");
    }
    if ((m & (InputEvent.BUTTON3_DOWN_MASK | InputEvent.BUTTON3_MASK)) != 0) {
      System.out.println("button3 ");
    }
    switch (key.getKeyEventType()) {
    case KeyEvent.KEY_TYPED:
      System.out.println("typed ");
      System.out.println(key.getKeyChar() + " ");
      break;
    case KeyEvent.KEY_PRESSED:
      System.out.println("pressed ");
      System.out.println(getKeyText(key.getKeyCode()) + " ");
      break;
    case KeyEvent.KEY_RELEASED:
      System.out.println("released ");
      System.out.println(getKeyText(key.getKeyCode()) + " ");
      break;
    default:
      System.out.println("unknown-event-type ");
      break;
    }
  }
  static String getKeyText(int keyCode) {
    if (keyCode >= KeyEvent.VK_0 && keyCode <= KeyEvent.VK_9 || keyCode >= KeyEvent.VK_A
        && keyCode <= KeyEvent.VK_Z) {
      return String.valueOf((char) keyCode);
    }
    switch (keyCode) {
    case KeyEvent.VK_COMMA:
      return "COMMA";
    case KeyEvent.VK_PERIOD:
      return "PERIOD";
    case KeyEvent.VK_SLASH:
      return "SLASH";
    case KeyEvent.VK_SEMICOLON:
      return "SEMICOLON";
    case KeyEvent.VK_EQUALS:
      return "EQUALS";
    case KeyEvent.VK_OPEN_BRACKET:
      return "OPEN_BRACKET";
    case KeyEvent.VK_BACK_SLASH:
      return "BACK_SLASH";
    case KeyEvent.VK_CLOSE_BRACKET:
      return "CLOSE_BRACKET";
    case KeyEvent.VK_ENTER:
      return "ENTER";
    case KeyEvent.VK_BACK_SPACE:
      return "BACK_SPACE";
    case KeyEvent.VK_TAB:
      return "TAB";
    case KeyEvent.VK_CANCEL:
      return "CANCEL";
    case KeyEvent.VK_CLEAR:
      return "CLEAR";
    case KeyEvent.VK_SHIFT:
      return "SHIFT";
    case KeyEvent.VK_CONTROL:
      return "CONTROL";
    case KeyEvent.VK_ALT:
      return "ALT";
    case KeyEvent.VK_PAUSE:
      return "PAUSE";
    case KeyEvent.VK_CAPS_LOCK:
      return "CAPS_LOCK";
    case KeyEvent.VK_ESCAPE:
      return "ESCAPE";
    case KeyEvent.VK_SPACE:
      return "SPACE";
    case KeyEvent.VK_PAGE_UP:
      return "PAGE_UP";
    case KeyEvent.VK_PAGE_DOWN:
      return "PAGE_DOWN";
    case KeyEvent.VK_END:
      return "END";
    case KeyEvent.VK_HOME:
      return "HOME";
    case KeyEvent.VK_LEFT:
      return "LEFT";
    case KeyEvent.VK_UP:
      return "UP";
    case KeyEvent.VK_RIGHT:
      return "RIGHT";
    case KeyEvent.VK_DOWN:
      return "DOWN";
    case KeyEvent.VK_MULTIPLY:
      return "MULTIPLY";
    case KeyEvent.VK_ADD:
      return "ADD";
    case KeyEvent.VK_SEPARATOR:
      return "SEPARATOR";
    case KeyEvent.VK_SUBTRACT:
      return "SUBTRACT";
    case KeyEvent.VK_DECIMAL:
      return "DECIMAL";
    case KeyEvent.VK_DIVIDE:
      return "DIVIDE";
    case KeyEvent.VK_DELETE:
      return "DELETE";
    case KeyEvent.VK_NUM_LOCK:
      return "NUM_LOCK";
    case KeyEvent.VK_SCROLL_LOCK:
      return "SCROLL_LOCK";
    case KeyEvent.VK_F1:
      return "F1";
    case KeyEvent.VK_F2:
      return "F2";
    case KeyEvent.VK_F3:
      return "F3";
    case KeyEvent.VK_F4:
      return "F4";
    case KeyEvent.VK_F5:
      return "F5";
    case KeyEvent.VK_F6:
      return "F6";
    case KeyEvent.VK_F7:
      return "F7";
    case KeyEvent.VK_F8:
      return "F8";
    case KeyEvent.VK_F9:
      return "F9";
    case KeyEvent.VK_F10:
      return "F10";
    case KeyEvent.VK_F11:
      return "F11";
    case KeyEvent.VK_F12:
      return "F12";
    case KeyEvent.VK_F13:
      return "F13";
    case KeyEvent.VK_F14:
      return "F14";
    case KeyEvent.VK_F15:
      return "F15";
    case KeyEvent.VK_F16:
      return "F16";
    case KeyEvent.VK_F17:
      return "F17";
    case KeyEvent.VK_F18:
      return "F18";
    case KeyEvent.VK_F19:
      return "F19";
    case KeyEvent.VK_F20:
      return "F20";
    case KeyEvent.VK_F21:
      return "F21";
    case KeyEvent.VK_F22:
      return "F22";
    case KeyEvent.VK_F23:
      return "F23";
    case KeyEvent.VK_F24:
      return "F24";
    case KeyEvent.VK_PRINTSCREEN:
      return "PRINTSCREEN";
    case KeyEvent.VK_INSERT:
      return "INSERT";
    case KeyEvent.VK_HELP:
      return "HELP";
    case KeyEvent.VK_META:
      return "META";
    case KeyEvent.VK_BACK_QUOTE:
      return "BACK_QUOTE";
    case KeyEvent.VK_QUOTE:
      return "QUOTE";
    case KeyEvent.VK_KP_UP:
      return "KP_UP";
    case KeyEvent.VK_KP_DOWN:
      return "KP_DOWN";
    case KeyEvent.VK_KP_LEFT:
      return "KP_LEFT";
    case KeyEvent.VK_KP_RIGHT:
      return "KP_RIGHT";
    case KeyEvent.VK_DEAD_GRAVE:
      return "DEAD_GRAVE";
    case KeyEvent.VK_DEAD_ACUTE:
      return "DEAD_ACUTE";
    case KeyEvent.VK_DEAD_CIRCUMFLEX:
      return "DEAD_CIRCUMFLEX";
    case KeyEvent.VK_DEAD_TILDE:
      return "DEAD_TILDE";
    case KeyEvent.VK_DEAD_MACRON:
      return "DEAD_MACRON";
    case KeyEvent.VK_DEAD_BREVE:
      return "DEAD_BREVE";
    case KeyEvent.VK_DEAD_ABOVEDOT:
      return "DEAD_ABOVEDOT";
    case KeyEvent.VK_DEAD_DIAERESIS:
      return "DEAD_DIAERESIS";
    case KeyEvent.VK_DEAD_ABOVERING:
      return "DEAD_ABOVERING";
    case KeyEvent.VK_DEAD_DOUBLEACUTE:
      return "DEAD_DOUBLEACUTE";
    case KeyEvent.VK_DEAD_CARON:
      return "DEAD_CARON";
    case KeyEvent.VK_DEAD_CEDILLA:
      return "DEAD_CEDILLA";
    case KeyEvent.VK_DEAD_OGONEK:
      return "DEAD_OGONEK";
    case KeyEvent.VK_DEAD_IOTA:
      return "DEAD_IOTA";
    case KeyEvent.VK_DEAD_VOICED_SOUND:
      return "DEAD_VOICED_SOUND";
    case KeyEvent.VK_DEAD_SEMIVOICED_SOUND:
      return "DEAD_SEMIVOICED_SOUND";
    case KeyEvent.VK_AMPERSAND:
      return "AMPERSAND";
    case KeyEvent.VK_ASTERISK:
      return "ASTERISK";
    case KeyEvent.VK_QUOTEDBL:
      return "QUOTEDBL";
    case KeyEvent.VK_LESS:
      return "LESS";
    case KeyEvent.VK_GREATER:
      return "GREATER";
    case KeyEvent.VK_BRACELEFT:
      return "BRACELEFT";
    case KeyEvent.VK_BRACERIGHT:
      return "BRACERIGHT";
    case KeyEvent.VK_AT:
      return "AT";
    case KeyEvent.VK_COLON:
      return "COLON";
    case KeyEvent.VK_CIRCUMFLEX:
      return "CIRCUMFLEX";
    case KeyEvent.VK_DOLLAR:
      return "DOLLAR";
    case KeyEvent.VK_EURO_SIGN:
      return "EURO_SIGN";
    case KeyEvent.VK_EXCLAMATION_MARK:
      return "EXCLAMATION_MARK";
    case KeyEvent.VK_INVERTED_EXCLAMATION_MARK:
      return "INVERTED_EXCLAMATION_MARK";
    case KeyEvent.VK_LEFT_PARENTHESIS:
      return "LEFT_PARENTHESIS";
    case KeyEvent.VK_NUMBER_SIGN:
      return "NUMBER_SIGN";
    case KeyEvent.VK_MINUS:
      return "MINUS";
    case KeyEvent.VK_PLUS:
      return "PLUS";
    case KeyEvent.VK_RIGHT_PARENTHESIS:
      return "RIGHT_PARENTHESIS";
    case KeyEvent.VK_UNDERSCORE:
      return "UNDERSCORE";
    case KeyEvent.VK_FINAL:
      return "FINAL";
    case KeyEvent.VK_CONVERT:
      return "CONVERT";
    case KeyEvent.VK_NONCONVERT:
      return "NONCONVERT";
    case KeyEvent.VK_ACCEPT:
      return "ACCEPT";
    case KeyEvent.VK_MODECHANGE:
      return "MODECHANGE";
    case KeyEvent.VK_KANA:
      return "KANA";
    case KeyEvent.VK_KANJI:
      return "KANJI";
    case KeyEvent.VK_ALPHANUMERIC:
      return "ALPHANUMERIC";
    case KeyEvent.VK_KATAKANA:
      return "KATAKANA";
    case KeyEvent.VK_HIRAGANA:
      return "HIRAGANA";
    case KeyEvent.VK_FULL_WIDTH:
      return "FULL_WIDTH";
    case KeyEvent.VK_HALF_WIDTH:
      return "HALF_WIDTH";
    case KeyEvent.VK_ROMAN_CHARACTERS:
      return "ROMAN_CHARACTERS";
    case KeyEvent.VK_ALL_CANDIDATES:
      return "ALL_CANDIDATES";
    case KeyEvent.VK_PREVIOUS_CANDIDATE:
      return "PREVIOUS_CANDIDATE";
    case KeyEvent.VK_CODE_INPUT:
      return "CODE_INPUT";
    case KeyEvent.VK_JAPANESE_KATAKANA:
      return "JAPANESE_KATAKANA";
    case KeyEvent.VK_JAPANESE_HIRAGANA:
      return "JAPANESE_HIRAGANA";
    case KeyEvent.VK_JAPANESE_ROMAN:
      return "JAPANESE_ROMAN";
    case KeyEvent.VK_KANA_LOCK:
      return "KANA_LOCK";
    case KeyEvent.VK_INPUT_METHOD_ON_OFF:
      return "INPUT_METHOD_ON_OFF";
    case KeyEvent.VK_AGAIN:
      return "AGAIN";
    case KeyEvent.VK_UNDO:
      return "UNDO";
    case KeyEvent.VK_COPY:
      return "COPY";
    case KeyEvent.VK_PASTE:
      return "PASTE";
    case KeyEvent.VK_CUT:
      return "CUT";
    case KeyEvent.VK_FIND:
      return "FIND";
    case KeyEvent.VK_PROPS:
      return "PROPS";
    case KeyEvent.VK_STOP:
      return "STOP";
    case KeyEvent.VK_COMPOSE:
      return "COMPOSE";
    case KeyEvent.VK_ALT_GRAPH:
      return "ALT_GRAPH";
    }
    if (keyCode >= KeyEvent.VK_NUMPAD0 && keyCode <= KeyEvent.VK_NUMPAD9) {
      char c = (char) (keyCode - KeyEvent.VK_NUMPAD0 + "0");
      return "NUMPAD" + c;
    }
    return "unknown(0x" + Integer.toString(keyCode, 16) + ")";
  }
}





List keystrokes in the WHEN_IN_FOCUSED_WINDOW input map of the component

import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component = new JButton("button");
    InputMap map = component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    list(map, map.keys());
    list(map, map.allKeys());
  }
  static void list(InputMap map, KeyStroke[] keys) {
    if (keys == null) {
      return;
    }
    for (int i = 0; i < keys.length; i++) {
      keyStroke2String(keys[i]);
      while (map.get(keys[i]) == null) {
        map = map.getParent();
      }
      if (map.get(keys[i]) instanceof String) {
        String actionName = (String) map.get(keys[i]);
      } else {
        Action action = (Action) map.get(keys[i]);
      }
    }
  }
  static void keyStroke2String(KeyStroke key) {
    int m = key.getModifiers();
    if ((m & (InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK)) != 0) {
      System.out.println("shift ");
    }
    if ((m & (InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK)) != 0) {
      System.out.println("ctrl ");
    }
    if ((m & (InputEvent.META_DOWN_MASK | InputEvent.META_MASK)) != 0) {
      System.out.println("meta ");
    }
    if ((m & (InputEvent.ALT_DOWN_MASK | InputEvent.ALT_MASK)) != 0) {
      System.out.println("alt ");
    }
    if ((m & (InputEvent.BUTTON1_DOWN_MASK | InputEvent.BUTTON1_MASK)) != 0) {
      System.out.println("button1 ");
    }
    if ((m & (InputEvent.BUTTON2_DOWN_MASK | InputEvent.BUTTON2_MASK)) != 0) {
      System.out.println("button2 ");
    }
    if ((m & (InputEvent.BUTTON3_DOWN_MASK | InputEvent.BUTTON3_MASK)) != 0) {
      System.out.println("button3 ");
    }
    switch (key.getKeyEventType()) {
    case KeyEvent.KEY_TYPED:
      System.out.println("typed ");
      System.out.println(key.getKeyChar() + " ");
      break;
    case KeyEvent.KEY_PRESSED:
      System.out.println("pressed ");
      System.out.println(getKeyText(key.getKeyCode()) + " ");
      break;
    case KeyEvent.KEY_RELEASED:
      System.out.println("released ");
      System.out.println(getKeyText(key.getKeyCode()) + " ");
      break;
    default:
      System.out.println("unknown-event-type ");
      break;
    }
  }
  static String getKeyText(int keyCode) {
    if (keyCode >= KeyEvent.VK_0 && keyCode <= KeyEvent.VK_9 || keyCode >= KeyEvent.VK_A
        && keyCode <= KeyEvent.VK_Z) {
      return String.valueOf((char) keyCode);
    }
    switch (keyCode) {
    case KeyEvent.VK_COMMA:
      return "COMMA";
    case KeyEvent.VK_PERIOD:
      return "PERIOD";
    case KeyEvent.VK_SLASH:
      return "SLASH";
    case KeyEvent.VK_SEMICOLON:
      return "SEMICOLON";
    case KeyEvent.VK_EQUALS:
      return "EQUALS";
    case KeyEvent.VK_OPEN_BRACKET:
      return "OPEN_BRACKET";
    case KeyEvent.VK_BACK_SLASH:
      return "BACK_SLASH";
    case KeyEvent.VK_CLOSE_BRACKET:
      return "CLOSE_BRACKET";
    case KeyEvent.VK_ENTER:
      return "ENTER";
    case KeyEvent.VK_BACK_SPACE:
      return "BACK_SPACE";
    case KeyEvent.VK_TAB:
      return "TAB";
    case KeyEvent.VK_CANCEL:
      return "CANCEL";
    case KeyEvent.VK_CLEAR:
      return "CLEAR";
    case KeyEvent.VK_SHIFT:
      return "SHIFT";
    case KeyEvent.VK_CONTROL:
      return "CONTROL";
    case KeyEvent.VK_ALT:
      return "ALT";
    case KeyEvent.VK_PAUSE:
      return "PAUSE";
    case KeyEvent.VK_CAPS_LOCK:
      return "CAPS_LOCK";
    case KeyEvent.VK_ESCAPE:
      return "ESCAPE";
    case KeyEvent.VK_SPACE:
      return "SPACE";
    case KeyEvent.VK_PAGE_UP:
      return "PAGE_UP";
    case KeyEvent.VK_PAGE_DOWN:
      return "PAGE_DOWN";
    case KeyEvent.VK_END:
      return "END";
    case KeyEvent.VK_HOME:
      return "HOME";
    case KeyEvent.VK_LEFT:
      return "LEFT";
    case KeyEvent.VK_UP:
      return "UP";
    case KeyEvent.VK_RIGHT:
      return "RIGHT";
    case KeyEvent.VK_DOWN:
      return "DOWN";
    case KeyEvent.VK_MULTIPLY:
      return "MULTIPLY";
    case KeyEvent.VK_ADD:
      return "ADD";
    case KeyEvent.VK_SEPARATOR:
      return "SEPARATOR";
    case KeyEvent.VK_SUBTRACT:
      return "SUBTRACT";
    case KeyEvent.VK_DECIMAL:
      return "DECIMAL";
    case KeyEvent.VK_DIVIDE:
      return "DIVIDE";
    case KeyEvent.VK_DELETE:
      return "DELETE";
    case KeyEvent.VK_NUM_LOCK:
      return "NUM_LOCK";
    case KeyEvent.VK_SCROLL_LOCK:
      return "SCROLL_LOCK";
    case KeyEvent.VK_F1:
      return "F1";
    case KeyEvent.VK_F2:
      return "F2";
    case KeyEvent.VK_F3:
      return "F3";
    case KeyEvent.VK_F4:
      return "F4";
    case KeyEvent.VK_F5:
      return "F5";
    case KeyEvent.VK_F6:
      return "F6";
    case KeyEvent.VK_F7:
      return "F7";
    case KeyEvent.VK_F8:
      return "F8";
    case KeyEvent.VK_F9:
      return "F9";
    case KeyEvent.VK_F10:
      return "F10";
    case KeyEvent.VK_F11:
      return "F11";
    case KeyEvent.VK_F12:
      return "F12";
    case KeyEvent.VK_F13:
      return "F13";
    case KeyEvent.VK_F14:
      return "F14";
    case KeyEvent.VK_F15:
      return "F15";
    case KeyEvent.VK_F16:
      return "F16";
    case KeyEvent.VK_F17:
      return "F17";
    case KeyEvent.VK_F18:
      return "F18";
    case KeyEvent.VK_F19:
      return "F19";
    case KeyEvent.VK_F20:
      return "F20";
    case KeyEvent.VK_F21:
      return "F21";
    case KeyEvent.VK_F22:
      return "F22";
    case KeyEvent.VK_F23:
      return "F23";
    case KeyEvent.VK_F24:
      return "F24";
    case KeyEvent.VK_PRINTSCREEN:
      return "PRINTSCREEN";
    case KeyEvent.VK_INSERT:
      return "INSERT";
    case KeyEvent.VK_HELP:
      return "HELP";
    case KeyEvent.VK_META:
      return "META";
    case KeyEvent.VK_BACK_QUOTE:
      return "BACK_QUOTE";
    case KeyEvent.VK_QUOTE:
      return "QUOTE";
    case KeyEvent.VK_KP_UP:
      return "KP_UP";
    case KeyEvent.VK_KP_DOWN:
      return "KP_DOWN";
    case KeyEvent.VK_KP_LEFT:
      return "KP_LEFT";
    case KeyEvent.VK_KP_RIGHT:
      return "KP_RIGHT";
    case KeyEvent.VK_DEAD_GRAVE:
      return "DEAD_GRAVE";
    case KeyEvent.VK_DEAD_ACUTE:
      return "DEAD_ACUTE";
    case KeyEvent.VK_DEAD_CIRCUMFLEX:
      return "DEAD_CIRCUMFLEX";
    case KeyEvent.VK_DEAD_TILDE:
      return "DEAD_TILDE";
    case KeyEvent.VK_DEAD_MACRON:
      return "DEAD_MACRON";
    case KeyEvent.VK_DEAD_BREVE:
      return "DEAD_BREVE";
    case KeyEvent.VK_DEAD_ABOVEDOT:
      return "DEAD_ABOVEDOT";
    case KeyEvent.VK_DEAD_DIAERESIS:
      return "DEAD_DIAERESIS";
    case KeyEvent.VK_DEAD_ABOVERING:
      return "DEAD_ABOVERING";
    case KeyEvent.VK_DEAD_DOUBLEACUTE:
      return "DEAD_DOUBLEACUTE";
    case KeyEvent.VK_DEAD_CARON:
      return "DEAD_CARON";
    case KeyEvent.VK_DEAD_CEDILLA:
      return "DEAD_CEDILLA";
    case KeyEvent.VK_DEAD_OGONEK:
      return "DEAD_OGONEK";
    case KeyEvent.VK_DEAD_IOTA:
      return "DEAD_IOTA";
    case KeyEvent.VK_DEAD_VOICED_SOUND:
      return "DEAD_VOICED_SOUND";
    case KeyEvent.VK_DEAD_SEMIVOICED_SOUND:
      return "DEAD_SEMIVOICED_SOUND";
    case KeyEvent.VK_AMPERSAND:
      return "AMPERSAND";
    case KeyEvent.VK_ASTERISK:
      return "ASTERISK";
    case KeyEvent.VK_QUOTEDBL:
      return "QUOTEDBL";
    case KeyEvent.VK_LESS:
      return "LESS";
    case KeyEvent.VK_GREATER:
      return "GREATER";
    case KeyEvent.VK_BRACELEFT:
      return "BRACELEFT";
    case KeyEvent.VK_BRACERIGHT:
      return "BRACERIGHT";
    case KeyEvent.VK_AT:
      return "AT";
    case KeyEvent.VK_COLON:
      return "COLON";
    case KeyEvent.VK_CIRCUMFLEX:
      return "CIRCUMFLEX";
    case KeyEvent.VK_DOLLAR:
      return "DOLLAR";
    case KeyEvent.VK_EURO_SIGN:
      return "EURO_SIGN";
    case KeyEvent.VK_EXCLAMATION_MARK:
      return "EXCLAMATION_MARK";
    case KeyEvent.VK_INVERTED_EXCLAMATION_MARK:
      return "INVERTED_EXCLAMATION_MARK";
    case KeyEvent.VK_LEFT_PARENTHESIS:
      return "LEFT_PARENTHESIS";
    case KeyEvent.VK_NUMBER_SIGN:
      return "NUMBER_SIGN";
    case KeyEvent.VK_MINUS:
      return "MINUS";
    case KeyEvent.VK_PLUS:
      return "PLUS";
    case KeyEvent.VK_RIGHT_PARENTHESIS:
      return "RIGHT_PARENTHESIS";
    case KeyEvent.VK_UNDERSCORE:
      return "UNDERSCORE";
    case KeyEvent.VK_FINAL:
      return "FINAL";
    case KeyEvent.VK_CONVERT:
      return "CONVERT";
    case KeyEvent.VK_NONCONVERT:
      return "NONCONVERT";
    case KeyEvent.VK_ACCEPT:
      return "ACCEPT";
    case KeyEvent.VK_MODECHANGE:
      return "MODECHANGE";
    case KeyEvent.VK_KANA:
      return "KANA";
    case KeyEvent.VK_KANJI:
      return "KANJI";
    case KeyEvent.VK_ALPHANUMERIC:
      return "ALPHANUMERIC";
    case KeyEvent.VK_KATAKANA:
      return "KATAKANA";
    case KeyEvent.VK_HIRAGANA:
      return "HIRAGANA";
    case KeyEvent.VK_FULL_WIDTH:
      return "FULL_WIDTH";
    case KeyEvent.VK_HALF_WIDTH:
      return "HALF_WIDTH";
    case KeyEvent.VK_ROMAN_CHARACTERS:
      return "ROMAN_CHARACTERS";
    case KeyEvent.VK_ALL_CANDIDATES:
      return "ALL_CANDIDATES";
    case KeyEvent.VK_PREVIOUS_CANDIDATE:
      return "PREVIOUS_CANDIDATE";
    case KeyEvent.VK_CODE_INPUT:
      return "CODE_INPUT";
    case KeyEvent.VK_JAPANESE_KATAKANA:
      return "JAPANESE_KATAKANA";
    case KeyEvent.VK_JAPANESE_HIRAGANA:
      return "JAPANESE_HIRAGANA";
    case KeyEvent.VK_JAPANESE_ROMAN:
      return "JAPANESE_ROMAN";
    case KeyEvent.VK_KANA_LOCK:
      return "KANA_LOCK";
    case KeyEvent.VK_INPUT_METHOD_ON_OFF:
      return "INPUT_METHOD_ON_OFF";
    case KeyEvent.VK_AGAIN:
      return "AGAIN";
    case KeyEvent.VK_UNDO:
      return "UNDO";
    case KeyEvent.VK_COPY:
      return "COPY";
    case KeyEvent.VK_PASTE:
      return "PASTE";
    case KeyEvent.VK_CUT:
      return "CUT";
    case KeyEvent.VK_FIND:
      return "FIND";
    case KeyEvent.VK_PROPS:
      return "PROPS";
    case KeyEvent.VK_STOP:
      return "STOP";
    case KeyEvent.VK_COMPOSE:
      return "COMPOSE";
    case KeyEvent.VK_ALT_GRAPH:
      return "ALT_GRAPH";
    }
    if (keyCode >= KeyEvent.VK_NUMPAD0 && keyCode <= KeyEvent.VK_NUMPAD9) {
      char c = (char) (keyCode - KeyEvent.VK_NUMPAD0 + "0");
      return "NUMPAD" + c;
    }
    return "unknown(0x" + Integer.toString(keyCode, 16) + ")";
  }
}





Override $ key

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) {
    JTextField component = new JTextField(10);

    component.getInputMap(JComponent.WHEN_FOCUSED).put(
        KeyStroke.getKeyStroke("typed $"), "actionName");
    JFrame f = new JFrame();
    f.add(component);
    f.setSize(300, 300);
    f.setVisible(true);
  }
}





Overriding - key

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) {
    JTextField component = new JTextField(10);
    component.getInputMap(JComponent.WHEN_FOCUSED).put(
        KeyStroke.getKeyStroke("typed -"), "actionName");
    JFrame f = new JFrame();
    f.add(component);
    f.setSize(300, 300);
    f.setVisible(true);
  }
}





Overriding space key

import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) {
    JTextField component = new JTextField(10);
    
    component.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(new Character(" "), 0), "actionName");
    JFrame f = new JFrame();
    f.add(component);
    f.setSize(300, 300);
    f.setVisible(true);
  }
}





Registering a KeyStroke

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.KeyStroke;
public class KeyStrokeSample {
  public static void main(String[] a) {
    String ACTION_KEY = "theAction";
    JFrame frame = new JFrame("KeyStroke Sample");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton buttonA = new JButton("Press "control alt 7"");
    Action actionListener = new AbstractAction() {
      public void actionPerformed(ActionEvent actionEvent) {
        JButton source = (JButton) actionEvent.getSource();
        System.out.println(source.getText());
      }
    };
    KeyStroke controlAlt7 = KeyStroke.getKeyStroke("control alt 7");
    InputMap inputMap = buttonA.getInputMap();
    inputMap.put(controlAlt7, ACTION_KEY);
    ActionMap actionMap = buttonA.getActionMap();
    actionMap.put(ACTION_KEY, actionListener);
    frame.add(buttonA);
    frame.setSize(400, 200);
    frame.setVisible(true);
  }
}





Remove all backward focus traversal keys for the application

import java.awt.AWTKeyStroke;
import java.awt.KeyboardFocusManager;
import java.util.HashSet;
import java.util.Set;
public class Main {
  public static void main(String[] argv) throws Exception {
    Set<AWTKeyStroke> set = new HashSet<AWTKeyStroke>();
 
    KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys(
        KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, set);
  }
}





Remove all forward focus traversal keys for the application

import java.awt.AWTKeyStroke;
import java.awt.KeyboardFocusManager;
import java.util.HashSet;
import java.util.Set;
public class Main {
  public static void main(String[] argv) throws Exception {
    Set<AWTKeyStroke> set = new HashSet<AWTKeyStroke>();
    KeyboardFocusManager.getCurrentKeyboardFocusManager().setDefaultFocusTraversalKeys(
        KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, set);
 
  }
}





Set<AWTKeyStroke> java.awt.Container.getFocusTraversalKeys(int id)

import java.awt.AWTKeyStroke;
import java.awt.KeyboardFocusManager;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JButton;
import javax.swing.KeyStroke;
public class Main {
  public static void main(String[] argv) throws Exception {
    JButton component = new JButton("a");
    Set<AWTKeyStroke> set = new HashSet<AWTKeyStroke>(component
        .getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
    set.add(KeyStroke.getKeyStroke("F2"));
    component.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, set);
  }
}