概要

デフォルトのTabキーに加えて、矢印キーでもフォーカス移動できるように設定します。

サンプルコード

KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();

Set<AWTKeyStroke> forwardKeys = new HashSet<>(
    focusManager.getDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0));
forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
focusManager.setDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);

Set<AWTKeyStroke> backwardKeys = new HashSet<>(
    focusManager.getDefaultFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
backwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0));
backwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0));
focusManager.setDefaultFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, backwardKeys);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、デフォルトのフォーカストラバーサルキー(TabShift+Tab)に加えて、上下左右の矢印キーでもフォーカス移動できるように設定しています。

  • KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS
    • KeyEvent.VK_RIGHT, KeyEvent.VK_DOWN
  • KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS
    • KeyEvent.VK_LEFT, KeyEvent.VK_UP

  • JFrameJDialogに別々のFocusTraversalKeysを設定したい場合は、以下のようにContainer#setFocusTraversalKeysを使用する
Set<AWTKeyStroke> forwardKeys = new HashSet<>(
    frame.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0));
forwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0));
frame.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, forwardKeys);

参考リンク

コメント