JScrollBarのKnobの最小サイズを設定する
Total: 6619, Today: 1, Yesterday: 1
Posted by aterai at
Last-modified:
Summary
JScrollBarのKnobの最小サイズを設定します。
Screenshot

Advertisement
Source Code Examples
Description
- 左: デフォルト
- 右:
JScrollBarのつまみ(Thumb、Knob)に最小サイズを設定Horizontalの場合の最小サイズは幅、Verticalの場合は高さ
LookAndFeelによってUIManager.put("ScrollBar.minimumThumbSize", new Dimension(32, 32));が有効かどうかは異なる- 有効:
BasicLookAndFeel、WindowsLookAndFeel、NimbusLookAndFeel(Java 8以上?) - 無効:
MetalLookAndFeel、NimbusLookAndFeel- 以下のように縦スクロールバーならその幅が最小サイズになるよう上書きされているため
ScrollBar.minimumThumbSizeを設定しても効果がない// @see javax/swing/plaf/metal/MetalScrollBarUI.java protected Dimension getMinimumThumbSize() { return new Dimension(scrollBarWidth, scrollBarWidth); }
- 以下のように縦スクロールバーならその幅が最小サイズになるよう上書きされているため
- 有効:
- 確実にノブの最小サイズを設定したい場合は
BasicScrollBarUI#getMinimumThumbSize()をオーバーライドして最小値を指定するしかなさそう
JDK 1.8.0_20で修正されて、この記事のスクリーンショットのようにノブのサイズが小さくなり過ぎることはなくなったWindowsScrollBarUI(XPStyle)が修正された- JDK-8039464 The scrollbar in JScrollPane has no right border if used WindowsLookAndFeel
Windows 10はXPStyleではない?のでUIManager.put("ScrollBar.minimumThumbSize", ...)は効果がない
Windows 7のWindowsLookAndFeelでJSliderを使った場合も、つまみのサイズが小さすぎるが、UIManager.put("Slider.minimumHorizontalSize", new Dimension(32, 32))などとしても効果がない?
Slider.horizontalSize Slider.verticalSize Slider.minimumHorizontalSize Slider.minimumVerticalSize Slider.horizontalThumbIcon Slider.verticalThumbIcon
- 参考: Java Swing rendering bug on Windows 7 look-and-feel? - Stack Overflow
slider.setPaintTicks(true)とした場合は、正常なサイズで描画される
- JSliderのつまみの形状を変更
- トラックを表示したくない場合は、
slider.putClientProperty("Slider.paintThumbArrowShape", Boolean.TRUE);で、つまみの形だけ変更
- トラックを表示したくない場合は、
Windows 11環境ではUIManager.put("ScrollBar.minimumThumbSize", new Dimension(32, 32))を設定しても無効?
Reference
- Java Swing rendering bug on Windows 7 look-and-feel? - Stack Overflow
- JSliderのつまみの形状を変更
- JScrollBarのKnobの最小サイズをJScrollPaneのサイズ相対に変更する