Swing/ArrowButtonlessScrollBar の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/ArrowButtonlessScrollBar へ行く。
- 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 --- * 概要 [#summary] `JScrollBar`の`ArrowButton`を非表示に設定します。 #download(https://drive.google.com/uc?id=1Z86M0kl6w-3P0yhRIA5uyxj8PEtvbJPr) * サンプルコード [#sourcecode] #code(link){{ 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"); // } // ... } }} * 解説 [#explanation] - 左: `ArrowButton`有り(デフォルト) -- `UIManager.put("ScrollBar.width", 10);`で`JScrollBar`の幅を変更 -- `ArrowButton`のアイコンサイズは変更されず?、微妙にずれてしまう -- `UIManager.put("ScrollBar.thumbHeight", 20);`は、`GTKLookAndFeel`、`SynthLookAndFeel`(`NimbusLookAndFeel`)でのみ有効? -- `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`を作成するとトラックをクリックした場合のスクロール速度がデフォルトより遅くなる? #code{{ 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); } }); }} * 参考リンク [#reference] - [[JScrollBarを半透明にする>Swing/TranslucentScrollBar]] * コメント [#comment] #comment #comment