• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:FocusTraversalKeysに矢印キーを追加してフォーカス移動
#navi(../)
#tags(KeyboardFocusManager, Focus, Container)
RIGHT:Posted by &author(aterai); at 2008-06-02
*FocusTraversalKeysに矢印キーを追加してフォーカス移動 [#tcf9885b]
デフォルトのKBD{TAB}キーに加えて、矢印キーでもフォーカス移動できるように設定します。
* FocusTraversalKeysに矢印キーを追加してフォーカス移動 [#tcf9885b]
デフォルトのKBD{Tab}キーに加えて、矢印キーでもフォーカス移動できるように設定します。

-&jnlp;
-&jar;
-&zip;
#download
#ref(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTNHR5gShI/AAAAAAAAAaQ/KUE3fbR0bXo/s800/FocusTraversalKeys.png)

//#screenshot
#ref(http://lh6.ggpht.com/_9Z4BYR88imo/TQTNHR5gShI/AAAAAAAAAaQ/KUE3fbR0bXo/s800/FocusTraversalKeys.png)

**サンプルコード [#c3444b6b]
** サンプルコード [#c3444b6b]
#code(link){{
KeyboardFocusManager focusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();

Set<AWTKeyStroke> forwardKeys = new HashSet<AWTKeyStroke>(
    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<AWTKeyStroke>(
    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);
}}

**解説 [#f1452eb0]
上記のサンプルでは、デフォルトのトラバーサルキー(KBD{TAB}, KBD{Shift}+KBD{TAB})に加えて、上下左右の矢印キーでもフォーカス移動できるようになっています。
** 解説 [#f1452eb0]
上記のサンプルでは、デフォルトのトラバーサルキー(KBD{Tab}, KBD{Shift+Tab})に加えて、上下左右の矢印キーでもフォーカス移動できるようになっています。

- ``KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS``
-- ``KeyEvent.VK_RIGHT``, ``KeyEvent.VK_DOWN``
- ``KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS``
-- ``KeyEvent.VK_LEFT``, ``KeyEvent.VK_UP``
- `KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS`
-- `KeyEvent.VK_RIGHT`, `KeyEvent.VK_DOWN`
- `KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS`
-- `KeyEvent.VK_LEFT`, `KeyEvent.VK_UP`

----
各``JFrame``や``JDialog``に別々の``FocusTraversalKeys``を設定したい場合は、``Container#setFocusTraversalKeys``を使用します。
各`JFrame`や`JDialog`に別々の`FocusTraversalKeys`を設定したい場合は、`Container#setFocusTraversalKeys`を使用します。

#code{{
Set<AWTKeyStroke> forwardKeys = new HashSet<AWTKeyStroke>(
    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);
}}

**参考リンク [#qecb6a95]
** 参考リンク [#qecb6a95]
- [http://docs.oracle.com/javase/jp/6/api/java/awt/KeyboardFocusManager.html KeyboardFocusManager#setDefaultFocusTraversalKeys]
- [http://docs.oracle.com/javase/jp/6/api/java/awt/Container.html Container#setFocusTraversalKeys]
- [http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html How to Use the Focus Subsystem]
- [[Focusの移動>Swing/FocusTraversal]]

**コメント [#yf942508]
** コメント [#yf942508]
#comment