JSplitPaneのDividerを展開収納するOneTouchButtonのサイズ、色などを変更
Total: 4389
, Today: 2
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JSplitPane
のDivider
をワンクリックで展開・収納するためのOneTouchButton
のサイズ、オフセット、背景色などを変更します。
Screenshot
Advertisement
サンプルコード
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);
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、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
では無効で常に中央揃えになる- JSplitPaneの展開・収納ボタンをDividerサイズの中央に配置する
Divider
のBorder
とOneTouchButton
divider.setBorder(BorderFactory.createMatteBorder(20, 0, 5, 0, Color.RED));
などを設定するとOneTouchButton
がBorder
にめり込んでしまう?