• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:FocusTraversalKeysに矢印キーを追加してフォーカス移動
#navi(../)
*FocusTraversalKeysに矢印キーを追加してフォーカス移動 [#tcf9885b]
Posted by [[terai]] at 2008-06-02

#contents

**概要 [#m8f67375]
デフォルトのTABキーに加えて、矢印キーでもフォーカス移動できるように設定します。

-&jnlp;
-&jar;
-&zip;

#screenshot

**サンプルコード [#c3444b6b]
#code{{
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]
上記のサンプルでは、デフォルトのトラバーサルキー(TAB,SHIFT+TAB)に加えて、上下左右の矢印キーでもフォーカス移動できるようになっています。

-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を使用します。
#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]
-[[KeyboardFocusManager#setDefaultFocusTraversalKeys(int, java.util.Set)>http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/KeyboardFocusManager.html#setDefaultFocusTraversalKeys(int, java.util.Set)]]
-[[Container#setFocusTraversalKeys(int, java.util.Set)>http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Container.html#setFocusTraversalKeys(int, java.util.Set)]]
-[[How to Use the Focus Subsystem>http://java.sun.com/docs/books/tutorial/uiswing/misc/focus.html#customFocusTraversal]]

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