Swing/OneTouchButton の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/OneTouchButton へ行く。
- Swing/OneTouchButton の差分を削除
--- category: swing folder: OneTouchButton title: JSplitPaneのDividerを展開収納するOneTouchButtonのサイズ、色などを変更 tags: [JSplitPane, SplitPaneDivider, JButton, LookAndFeel] author: aterai pubdate: 2014-09-08T00:05:45+09:00 description: JSplitPaneのDividerをワンクリックで展開・収納するためのOneTouchButtonのサイズ、オフセット、背景色などを変更します。 image: https://lh4.googleusercontent.com/-_zdaiM8x6a4/VAxzwh3xxFI/AAAAAAAACM0/hBR-P4Nn56A/s800/OneTouchButton.png --- * 概要 [#summary] `JSplitPane`の`Divider`をワンクリックで展開・収納するための`OneTouchButton`のサイズ、オフセット、背景色などを変更します。 #download(https://lh4.googleusercontent.com/-_zdaiM8x6a4/VAxzwh3xxFI/AAAAAAAACM0/hBR-P4Nn56A/s800/OneTouchButton.png) * サンプルコード [#sourcecode] #code(link){{ UIManager.put("SplitPane.oneTouchButtonSize", 32); UIManager.put("SplitPane.oneTouchButtonOffset", 50); // UIManager.put("SplitPane.centerOneTouchButtons", true); UIManager.put("SplitPaneDivider.border", BorderFactory.createLineBorder(Color.RED, 10)); UIManager.put("SplitPaneDivider.draggingColor", new Color(255, 100, 100, 100)); BasicSplitPaneDivider divider = ((BasicSplitPaneUI) splitPane.getUI()).getDivider(); divider.setBackground(Color.ORANGE); for (Component c: divider.getComponents()) { if (c instanceof JButton) { JButton b = (JButton) c; b.setBackground(Color.ORANGE); } } }} * 解説 [#explanation] 上記のサンプルでは、`OneTouchButton`(`JSplitPane`の`Divider`をワンクリックで展開・収納するための`JButton`)のサイズ、オフセット、背景色などを変更しています。 - `OneTouchButton`のサイズ指定 -- `UIManager.put("SplitPane.oneTouchButtonSize", 32);` -- `MetalLookAndFeel`では無効 -- `NimbusLookAndFeel`では無効で`Divider`のサイズに依存? - `OneTouchButton`のオフセット指定 -- `UIManager.put("oneTouchButtonOffset", 50);` -- `JSplitPane.VERTICAL_SPLIT`の場合`Divider`の左端から`LeftOneTouchButton`までの距離が設定可能 -- `NimbusLookAndFeel`のデフォルトは`30`になっているため`JSplitPane.HORIZONTAL_SPLIT`で`Divider`の高さがそれ以下の場合は`OneTouchButton`が表示できない - `OneTouchButton`の背景色 -- `JButton#paint(...)`がオーバーライドされて`oneTouchButton.getBackground()`の色で塗り潰されている(`oneTouchButton.setOpaque(false)`で透明にしても無意味)ので`setBackground()`で`Divider`の背景色と同じ色を設定 --- `OneTouchButton`の色や形は`JButton#paint(...)`の中で直接描画(`Color.BLACK`固定)されているため変更しづらい(`BasicSplitPaneUI`や`BasicSplitPaneDivider`をオーバーライドする必要がある) -- `MetalLookAndFeel`、`NimbusLookAndFeel`では無効 - `OneTouchButton`の中央揃え -- `UIManager.put("SplitPane.centerOneTouchButtons", true);` -- `MetalLookAndFeel`、`MotifLookAndFeel`、`WindowsLookAndFeel`、`NimbusLookAndFeel`などでは効果が無い -- %%`MetalLookAndFeel`、`MotifLookAndFeel`、`WindowsLookAndFeel`、%% `NimbusLookAndFeel`では無効で常に中央揃えになる -- [[JSplitPaneの展開・収納ボタンをDividerサイズの中央に配置する>Swing/CenterOneTouchButtons]] - `Divider`の`Border`と`OneTouchButton` -- `divider.setBorder(BorderFactory.createMatteBorder(20, 0, 5, 0, Color.RED));`などを設定すると`OneTouchButton`が`Border`にめり込んでしまう? * 参考リンク [#reference] - [[JSplitPaneのディバイダを展開、収納する>Swing/OneTouchExpandable]] - [[JSplitPaneの展開・収納ボタンをDividerサイズの中央に配置する>Swing/CenterOneTouchButtons]] * コメント [#comment] #comment #comment