JScrollBarのKnobの最小サイズをJScrollPaneのサイズ相対に変更する
Total: 1439
, Today: 2
, Yesterday: 0
Posted by aterai at
Last-modified:
概要
JScrollBar
のKnob
の最小サイズを固定値ではなく、JScrollPane
のサイズ相対になるよう設定します。
Screenshot
Advertisement
サンプルコード
JScrollPane scroll = new JScrollPane(textArea);
scroll.setVerticalScrollBar(new JScrollBar(Adjustable.VERTICAL) {
@Override public void updateUI() {
super.updateUI();
setUI(new MetalScrollBarUI() {
@Override protected Dimension getMinimumThumbSize() {
Dimension d = super.getMinimumThumbSize();
Rectangle r = SwingUtilities.calculateInnerArea(scroll, null);
d.height = Math.max(d.height, r.height / 12);
return d;
}
});
putClientProperty("JScrollBar.fastWheelScrolling", Boolean.TRUE);
}
});
View in GitHub: Java, Kotlin解説
- 左:
default
UIManager.put("ScrollBar.minimumThumbSize", new Dimension(32, 32))
でノブの最小サイズを設定BasicLookAndFeel
、NimbusLookAndFeel
で有効
MetalLookAndFeel
の場合、たとえば縦JScrollBar
はUIManager.getInt("ScrollBar.width")
の値が高さの最小サイズになるWindowsLookAndFeel
の場合OS
(レジストリ)の設定が優先される?- JScrollBarのKnobの最小サイズを設定する
- 右:
override getMinimumThumbSize()
BasicScrollBarUI#getMinimumThumbSize()
をオーバーライドして最小値を指定- このサンプルでは
JScrollBar
のノブの最小サイズは可変でJScrollPane
の高さの1/12
になるよう設定