• 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

概要

JTabbedPaneのタブにMnemonicを追加します。

サンプルコード

#spandel
int tabIdx = 3;
#spanend
#spanadd
JTabbedPane tab = new JTabbedPane();
#spanend
#spanadd
tab.addTab("Label", new JLabel("label"));
#spanend
#spanadd
tab.setMnemonicAt(0, KeyEvent.VK_L);
#spanend
#spanadd
tab.setDisplayedMnemonicIndexAt(0, 0);
#spanend
#spanadd

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

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

#spanend
tab.addTab("Button", new JButton("button"));
#spandel
tab.setMnemonicAt(tabIdx, KeyEvent.VK_B);
#spanend
#spandel
tab.setDisplayedMnemonicIndexAt(tabIdx, 0);
#spanend
#spanadd
tab.setMnemonicAt(3, KeyEvent.VK_B);
#spanend
#spanadd
tab.setDisplayedMnemonicIndexAt(3, 0);
#spanend
View in GitHub: Java, Kotlin

解説

上記のサンプルコードは、JTabbedPane3番目のタブにJTabbedPane#setMnemonicAt(3, KeyEvent.VK_B)メソッドを使用してMnemonicを設定し、Alt+Bのキー入力でそのタブにフォーカス移動が可能になっています。 上記のサンプルコードは、JTabbedPane3番目のタブにJTabbedPane#setMnemonicAt(3, KeyEvent.VK_B)メソッドを使用してMnemonicを設定し、Alt+Bキーの入力でそのタブへのフォーカス移動を可能にしています。 また、タブタイトルの先頭文字(B)にアンダーラインが入るようにJTabbedPane#setDisplayedMnemonicIndexAt(...)メソッドで設定しています。
  • -
  • JDK 6以降でタブタイトルにComponentを使用している場合、JTabbedPane#setDisplayedMnemonicIndexAt(...)メソッドではMnemonicにアンダーラインは表示されないので、以下のように追加するコンポーネント側でアンダーラインを表示するための設定が必要
  • タブタイトルの先頭文字(B)にアンダーラインが入るようにJTabbedPane#setDisplayedMnemonicIndexAt(...)メソッドで設定
  • JDK 6以降でタブタイトルにComponentを使用している場合はJTabbedPane#setDisplayedMnemonicIndexAt(...)メソッドを使用してもMnemonicにアンダーラインは表示されない
    • 以下のように追加するコンポーネント側でアンダーラインを表示するための設定が必要
      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);
      

参考リンク

コメント