---
category: swing
folder: TabMnemonic
title: JTabbedPaneのタブにMnemonicを追加
tags: [JTabbedPane, Mnemonic, JLabel]
author: aterai
pubdate: 2008-09-01T13:22:20+09:00
description: JTabbedPaneのタブにMnemonicを追加します。
image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTUu2fjTpI/AAAAAAAAAmg/EST6gnFRH84/s800/TabMnemonic.png
---
* 概要 [#summary]
`JTabbedPane`のタブに`Mnemonic`を追加します。

#download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTUu2fjTpI/AAAAAAAAAmg/EST6gnFRH84/s800/TabMnemonic.png)

* サンプルコード [#sourcecode]
#code(link){{
JTabbedPane tab = new JTabbedPane();
tab.addTab("Label", new JLabel("label"));
tab.setMnemonicAt(0, KeyEvent.VK_L);
tab.setDisplayedMnemonicIndexAt(0, 0);

tab.addTab("Tree", new JScrollPane(new JTree()));
tab.setMnemonicAt(1, KeyEvent.VK_T);
tab.setDisplayedMnemonicIndexAt(1, 0);

tab.addTab("TextField", new JTextField("field"));
tab.setMnemonicAt(2, KeyEvent.VK_F);
tab.setDisplayedMnemonicIndexAt(2, 4);

tab.addTab("Button", new JButton("button"));
tab.setMnemonicAt(3, KeyEvent.VK_B);
tab.setDisplayedMnemonicIndexAt(3, 0);
}}

* 解説 [#explanation]
上記のサンプルコードは、`JTabbedPane`の`3`番目のタブに`JTabbedPane#setMnemonicAt(3, KeyEvent.VK_B)`メソッドを使用して`Mnemonic`を設定し、KBD{Alt+B}のキー入力でそのタブにフォーカス移動が可能になっています。
上記のサンプルコードは、`JTabbedPane`の`3`番目のタブに`JTabbedPane#setMnemonicAt(3, KeyEvent.VK_B)`メソッドを使用して`Mnemonic`を設定し、KBD{Alt+B}キーの入力でそのタブへのフォーカス移動を可能にしています。

- タブタイトルの先頭文字(`B`)にアンダーラインが入るように`JTabbedPane#setDisplayedMnemonicIndexAt(...)`メソッドで設定
- `JDK 6`以降でタブタイトルに`Component`を使用している場合は`JTabbedPane#setDisplayedMnemonicIndexAt(...)`メソッドを使用しても`Mnemonic`にアンダーラインは表示されない
-- 以下のように追加するコンポーネント側でアンダーラインを表示するための設定が必要
#code{{
int index = tab.getTabCount();
String tabTitle = "label(0)";
JPanel p = new JPanel(new BorderLayout());
JLabel label = new JLabel(tabTitle);
JButton button = new JButton("x");
p.add(label,  BorderLayout.WEST);
p.add(button, BorderLayout.EAST);
tab.addTab(tabTitle, new JTree());
tab.setTabComponentAt(index, p);
tab.setMnemonicAt(index, KeyEvent.VK_0);
label.setDisplayedMnemonic(KeyEvent.VK_0);
}}

* 参考リンク [#reference]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JTabbedPane.html#setMnemonicAt-int-int- JTabbedPane#setMnemonicAt(...) (Java Platform SE 8)]
- [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JTabbedPane.html#setDisplayedMnemonicIndexAt-int-int- JTabbedPane#setDisplayedMnemonicIndexAt(...) (Java Platform SE 8)]

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