Swing/ToolBarLayout の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/ToolBarLayout へ行く。
- Swing/ToolBarLayout の差分を削除
--- 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 --- * 概要 [#summary] `JToolBar`でアイコンボタンを右寄せ、下寄せで表示します。 #download(https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTVb-HPZjI/AAAAAAAAAno/dMILsHzlipk/s800/ToolBarLayout.png) * サンプルコード [#sourcecode] #code(link){{ // 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; } }} * 解説 [#explanation] - `JToolBar`や`JMenuBar`のデフォルトレイアウトは`BoxLayout`のため`Box.createGlue()`を間に挟むことでボタンやメニューの右寄せが可能 - ボタンとボタンの間隔を固定値で空けたい場合は、`Box.createRigidArea`を使用する - ボタンとボタンの間隔を固定値で空けたい場合は`Box.createRigidArea`を使用する -- `Box.createHorizontalStrut(...)`や`Box.createVerticalStrut(...)`を使うとツールバーの水平・垂直が切り替わった時に余計な余白が発生する場合がある - 各アイコンは[http://web.archive.org/web/20120818143859/http://java.sun.com/developer/techDocs/hi/repository/ Java look and feel Graphics Repository]の`jlfgr-1_0.jar`がクラスパス内に存在する場合はそこから読み込んでいる ---- - `JDK 1.6`と`JDK 1.5`で`JToolBar`に配置したボタン表示が異なる? -- `JComponent#setRequestFocusEnabled(false)`(マウスクリックではフォーカスを取得しないが、キーボードからは許可)、または`AbstractButton#setFocusable(false)`と設定すると同一になる -- `JComponent#setRequestFocusEnabled(false)`(マウスクリックではフォーカスを取得しないがキーボードからは許可)、または`AbstractButton#setFocusable(false)`と設定すると同一になる #ref(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTVeG6fVBI/AAAAAAAAAns/II_0GGIdnNk/s800/ToolBarLayout1.png) - マウスクリックでツールバーボタンにフォーカスが移動すると、コピーボタンを押したらテキストエディタでの文字列選択状態がクリアされたり、参考の質問のような不具合が起こる - 参考: [https://community.oracle.com/thread/1358842 Swing - JTextPane selection color problem]の camickr さんの投稿(2008/10/25 0:34) - `%JAVA_HOME%/demo/jfc/Notepad/src/Notepad.java` * 参考リンク [#reference] - [http://web.archive.org/web/20120818143859/http://java.sun.com/developer/techDocs/hi/repository/ Java look and feel Graphics Repository] - [https://community.oracle.com/thread/1365522 Swing - Buttons like Netbeans'] - [https://docs.oracle.com/javase/tutorial/uiswing/components/menu.html#custom Customizing Menu Layout - How to Use Menus (The Java™ Tutorials > Creating a GUI With JFC/Swing > Using Swing Components)] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JComponent.html#setRequestFocusEnabled-boolean- JComponent#setRequestFocusEnabled(boolean) (Java Platform SE 8)] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/AbstractButton.html#setFocusPainted-boolean- AbstractButton#setFocusPainted(boolean) (Java Platform SE 8)] * コメント [#comment] #comment - 環境によって、上記のサンプルが右寄せにならない場合もあるようです。 -- &user(aterai); &new{2006-03-22 (水) 15:58:10}; - `setRequestFocusEnabled(false)`、スクリーンショット更新。 -- &user(aterai); &new{2008-10-27 (月) 15:20:38}; #comment