Swing/ArrowButtonlessScrollBar のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ArrowButtonlessScrollBar へ行く。
- 1 (2019-07-08 (月) 16:05:01)
- 2 (2019-07-08 (月) 17:24:38)
- 3 (2021-03-18 (木) 01:06:40)
- 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); } });