Swing/ArrowButtonlessScrollBar のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ArrowButtonlessScrollBar へ行く。
- category: swing folder: ArrowButtonlessScrollBar title: JScrollBarのArrowButtonを非表示にする tags: [JScrollBar, ArrowButton, JScrollPane] author: aterai pubdate: 2019-07-08T16:03:23+09:00 description: JScrollBarのArrowButtonを非表示に設定します。 image: https://drive.google.com/open?id=1Z86M0kl6w-3P0yhRIA5uyxj8PEtvbJPr
概要
JScrollBarのArrowButtonを非表示に設定します。
Screenshot

Advertisement
サンプルコード
UIManager.put("ScrollBar.width", 10);
UIManager.put("ScrollBar.thumbHeight", 20); // GTK, SynthLookAndFeel
UIManager.put("ScrollBar.minimumThumbSize", new Dimension(30, 30));
UIManager.put("ScrollBar.incrementButtonGap", 0);
UIManager.put("ScrollBar.decrementButtonGap", 0);
JScrollPane scroll = new JScrollPane(new JTextArea(txt)) {
@Override public void updateUI() {
super.updateUI();
getVerticalScrollBar().setUI(new ArrowButtonlessScrollBarUI());
getHorizontalScrollBar().setUI(new ArrowButtonlessScrollBarUI());
}
};
// ...
class ZeroSizeButton extends JButton {
private static final Dimension ZERO_SIZE = new Dimension();
@Override public Dimension getPreferredSize() {
return ZERO_SIZE;
}
}
class ArrowButtonlessScrollBarUI extends BasicScrollBarUI {
@Override protected JButton createDecreaseButton(int orientation) {
return new ZeroSizeButton();
}
@Override protected JButton createIncreaseButton(int orientation) {
return new ZeroSizeButton();
}
// @Override protected Dimension getMinimumThumbSize() {
// // return new Dimension(20, 20);
// return UIManager.getDimension("ScrollBar.minimumThumbSize");
// }
// ...
}
View in GitHub: Java, Kotlin解説
- 左:
ArrowButton有り(デフォルト)UIManager.put("ScrollBar.width", 10);でJScrollBarの幅を変更ArrowButtonのアイコンサイズは変更されず?、微妙にずれてしまうUIManager.put("ScrollBar.thumbHeight", 20);は、GTKLookAndFeel、SynthLookAndFeel(NimbusLookAndFeel)でのみ有効?UIManager.put("ArrowButton.size", 8);などを設定しても変化しない?
- 右:
ArrowButton無しBasicScrollBarUI#createDecreaseButton(...)、BasicScrollBarUI#createIncreaseButton(...)メソッドをオーバーライドしてサイズ0のJButtonを適用JButton#setVisible(false);の場合、ArrowButtonは非表示になるがJScrollBarに余白が残るUIManager.put("ScrollBar.squareButtons", Boolean.TRUE);を設定するとArrowButton#getPreferredSize()が無視されてJScrollBarの幅でArrowButtonは正方形になる(非表示ではなくなる)- 以下のように
new JScrollBar(Adjustable.VERTICAL)でJScrollBarを作成するとトラックをクリックした場合のスクロール速度がデフォルトより遅くなる?JScrollPane scrollPane = new JScrollPane(new JTextArea(txt)); scrollPane.setVerticalScrollBar(new JScrollBar(Adjustable.VERTICAL) { @Override public void updateUI() { super.updateUI(); setUI(new ArrowButtonlessScrollBarUI()); // ホイールでのスクロール速度は以下で速くなる putClientProperty("JScrollBar.fastWheelScrolling", Boolean.TRUE); } });