---
category: swing
folder: MinimumThumbSize
title: JScrollBarのKnobの最小サイズを設定する
tags: [JScrollBar, UIManager, JSlider]
author: aterai
pubdate: 2012-03-19T15:02:42+09:00
description: JScrollBarのKnobの最小サイズを設定します。
image: https://lh4.googleusercontent.com/-A8TRDbOQ1p4/T2bKeM8dcvI/AAAAAAAABKI/iBKMsL6eGfM/s800/MinimumThumbSize.png
---
* 概要 [#summary]
`JScrollBar`の`Knob`の最小サイズを設定します。

#download(https://lh4.googleusercontent.com/-A8TRDbOQ1p4/T2bKeM8dcvI/AAAAAAAABKI/iBKMsL6eGfM/s800/MinimumThumbSize.png)

* サンプルコード [#sourcecode]
#code(link){{
UIManager.put("ScrollBar.minimumThumbSize", new Dimension(32, 32));
}}

* 解説 [#explanation]
上記のサンプルでは、右の`JScrollPane`で、`JScrollBar`の`Knob`(`Thumb`)が短くなりすぎないように、最小サイズ(`Horizontal`の場合は幅、`Vertical`の場合は高さ)を設定します。

- 注: `LookAndFeel`によって、`UIManager.put("ScrollBar.minimumThumbSize", new Dimension(32, 32));`が有効かどうかは異なる
-- 有効: `BasicLookAndFeel`、`WindowsLookAndFeel`
-- 無効: `MetalLookAndFeel`、`NimbusLookAndFeel`
--- 以下のように、縦スクロールバーならその幅が最小サイズになるよう上書きされているため
#code{{
// @see javax/swing/plaf/metal/MetalScrollBarUI.java
protected Dimension getMinimumThumbSize() {
  return new Dimension(scrollBarWidth, scrollBarWidth);
}
}}

----
- `JDK 1.8.0_20`で修正されて、この記事のスクリーンショットのようにノブのサイズが小さくなり過ぎることはなくなった
-- `WindowsScrollBarUI`(`XPStyle`)が修正された
-- [https://bugs.openjdk.java.net/browse/JDK-8039464 JDK-8039464 The scrollbar in JScrollPane has no right border if used WindowsLookAndFeel]

----
`Windows 7`の`WindowsLookAndFeel`で`JSlider`を使った場合も、つまみ?のサイズが小さすぎるが、`UIManager.put("Slider.minimumHorizontalSize", new Dimension(32, 32))`などとしても効果がない?

 Slider.horizontalSize
 Slider.verticalSize
 Slider.minimumHorizontalSize
 Slider.minimumVerticalSize
 Slider.horizontalThumbIcon
 Slider.verticalThumbIcon

- 参考: [https://stackoverflow.com/questions/2754306/java-swing-rendering-bug-on-windows-7-look-and-feel Java Swing rendering bug on Windows 7 look-and-feel? - Stack Overflow]
-- `slider.setPaintTicks(true)`とした場合は、正常なサイズで描画される
- [[JSliderのつまみの形状を変更>Swing/ThumbArrowShape]]
-- トラックを表示したくない場合は、`slider.putClientProperty("Slider.paintThumbArrowShape", Boolean.TRUE);`で、つまみの形だけ変更

* 参考リンク [#reference]
- [https://stackoverflow.com/questions/2754306/java-swing-rendering-bug-on-windows-7-look-and-feel Java Swing rendering bug on Windows 7 look-and-feel? - Stack Overflow]
- [[JSliderのつまみの形状を変更>Swing/ThumbArrowShape]]

* コメント [#comment]
#comment
#comment