---
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