• category: swing folder: ToolBarLayout title: JToolBarでアイコンボタンを右寄せ tags: [JToolBar, JMenuBar, BoxLayout, JButton, Focus] author: aterai pubdate: 2006-01-23T14:20:11+09:00 description: JToolBarでアイコンボタンを右寄せ、下寄せで表示します。 image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTVb-HPZjI/AAAAAAAAAno/dMILsHzlipk/s800/ToolBarLayout.png

概要

JToolBarでアイコンボタンを右寄せ、下寄せで表示します。

サンプルコード

// jlfgr-1_0.jar
String path = "/toolbarButtonGraphics/general/";
URL url1 = getClass().getResource(path + "Copy24.gif");
URL url2 = getClass().getResource(path + "Cut24.gif");
URL url3 = getClass().getResource(path + "Help24.gif");
toolbar.add(createToolbarButton(url1));
toolbar.add(createToolbarButton(url2));
toolbar.add(Box.createGlue());
toolbar.add(createToolbarButton(url3));
// ...
private static JButton createToolbarButton(URL url) {
  JButton b = new JButton(new ImageIcon(url));
  b.setRequestFocusEnabled(false);
  // or: b.setFocusPainted(false);
  return b;
}
View in GitHub: Java, Kotlin

解説

JToolBarJMenuBarのデフォルトレイアウトはBoxLayoutなので、Box.createGlue()を間に挟むことでボタンやメニューの右寄せが可能です。

ボタンとボタンの間隔を固定値で空けたい場合は、Box.createRigidAreaを使用します。Box.createHorizontalStrut(...)Box.createVerticalStrut(...)を使うとツールバーの水平・垂直が切り替わった時に、余計な余白が発生する場合があります。

各アイコンは、Java look and feel Graphics Repositoryjlfgr-1_0.jarがクラスパス内に存在する場合はそこから読み込んでいます。


JDK 1.6で、JDK 1.5のようなボタン表示(フォーカスを取得しない)にするには、JComponent#setRequestFocusEnabled(false)(マウスクリックではフォーカスを取得しないが、キーボードからは許可)、または、AbstractButton#setFocusable(false)とする必要があるようです。

ToolBarLayout1.png
  • マウスクリックでツールバーボタンにフォーカスが移動すると、コピーボタンを押したらテキストエディタでの文字列選択状態がクリアされたり、参考の質問のような不具合が起こる
  • 参考: Swing - JTextPane selection color problemの camickr さんの投稿(2008/10/25 0:34)
  • %JAVA_HOME%/demo/jfc/Notepad/src/Notepad.java

参考リンク

コメント