概要
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));
view allprivate static JButton createToolbarButton(URL url) {
JButton b = new JButton(new ImageIcon(url));
b.setRequestFocusEnabled(false);
// or: b.setFocusPainted(false);
return b;
}
解説
JToolBar
やJMenuBar
のデフォルトレイアウトはBoxLayout
なので、Box.createGlue()
を間に挟むことでボタンやメニューの右寄せが可能です。
ボタンとボタンの間隔を固定値で空けたい場合は、Box.createRigidArea
を使用します。Box.createHorizontalStrut(...)
やBox.createVerticalStrut(...)
を使うとツールバーの水平・垂直が切り替わった時に、余計な余白が発生する場合があります。
各アイコンは、Java look and feel Graphics Repositoryのjlfgr-1_0.jar
がクラスパス内に存在する場合はそこから読み込んでいます。
JDK 1.6
で、JDK 1.5
のようなボタン表示(フォーカスを取得しない)にするには、JComponent#setRequestFocusEnabled(false)
(マウスクリックではフォーカスを取得しないが、キーボードからは許可)、または、AbstractButton#setFocusable(false)
とする必要があるようです。
- マウスクリックでツールバーボタンにフォーカスが移動すると、コピーボタンを押したらテキストエディタでの文字列選択状態がクリアされたり、参考の質問のような不具合が起こる
- 参考: Swing - JTextPane selection color problemの camickr さんの投稿(2008/10/25 0:34)
%JAVA_HOME%/demo/jfc/Notepad/src/Notepad.java
参考リンク
- Java look and feel Graphics Repository
- Swing - Buttons like Netbeans'
- Customizing Menu Layout - How to Use Menus (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)
- JComponent#setRequestFocusEnabled(boolean) (Java Platform SE 8)
- AbstractButton#setFocusPainted(boolean) (Java Platform SE 8)