• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:JScrollBarのKnobの最小サイズを設定する
#navi(../)
#tags(JScrollBar, UIManager, JSlider)
RIGHT:Posted by &author(aterai); at 2012-03-19
* JScrollBarのKnobの最小サイズを設定する [#g69fae5d]
`JScrollBar`の`Knob`の最小サイズを設定します。

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

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

** 解説 [#q43a92a4]
上記のサンプルでは、右の`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);
}
}}

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

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

- 参考: [http://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)`とした場合は、正常なサイズにみえる。
-- トラックを表示したくない場合は、`slider.putClientProperty("Slider.paintThumbArrowShape", Boolean.TRUE);`で、つまみの形だけ変更

//**参考リンク
** コメント [#k98a1523]
#comment