---
category: swing
folder: RoundedScrollPane
title: JScrollPaneの角を丸める
tags: [JScrollPane, Border, JComboBox]
author: aterai
pubdate: 2020-05-18T15:10:30+09:00
description: JScrollPaneに角丸表示をおこなうためのBorderを設定します。
image: https://drive.google.com/uc?id=1po7Hxu9X7xIcMO6Vs6YOZkzbZmMqyrN3
---
* Summary [#summary]
`JScrollPane`に角丸表示をおこなうための`Border`を設定します。
#download(https://drive.google.com/uc?id=1po7Hxu9X7xIcMO6Vs6YOZkzbZmMqyrN3)
* Source Code Examples [#sourcecode]
#code(link){{
JScrollPane scroll = new JScrollPane(tree) {
@Override public void updateUI() {
super.updateUI();
getVerticalScrollBar().setUI(new WithoutArrowButtonScrollBarUI());
getHorizontalScrollBar().setUI(new WithoutArrowButtonScrollBarUI());
}
};
scroll.setBackground(tree.getBackground());
scroll.setBorder(new RoundedCornerBorder());
}}
* Description [#explanation]
* Description [#description]
- `JScrollPane`
-- `JScrollPane`に`RoundedCornerBorder`を設定して角を丸める
-- `JScrollPane`の背景色を内部に配置したコンポーネントの背景色と同じ色に変更
-- `JScrollBar`の角を丸めて矢印ボタンを非表示化
-- 参考: [[JTextFieldの角を丸める>Swing/RoundedTextField]]
- `JComboBox`
-- ドロップダウンリストに使用される`JScrollPane`ではなく`JPopupMenu`に`BottomRoundedCornerBorder`を設定
--- 直接`JScrollPane`に`BottomRoundedCornerBorder`を設定しても無効?
-- `BasicComboPopup#createScroller()`をオーバーライドし`JScrollBar`の角を丸めて矢印ボタンを非表示化
-- [[JComboBoxの角を丸める>Swing/RoundedComboBox]]
-- [[JComboBoxのドロップダウンリストで使用するJScrollBarを変更する>Swing/ComboBoxScrollBar]]
#code{{
JComboBox<String> combo = new JComboBox<String>(makeModel()) {
private transient MouseListener handler;
private transient PopupMenuListener listener;
@Override public void updateUI() {
removeMouseListener(handler);
removePopupMenuListener(listener);
UIManager.put(KEY, new TopRoundedCornerBorder());
super.updateUI();
setUI(new BasicComboBoxUI() {
// Swing/ComboBoxScrollBar.html に移動
});
handler = new ComboRolloverHandler();
addMouseListener(handler);
listener = new HeavyWeightContainerListener();
addPopupMenuListener(listener);
Object o = getAccessibleContext().getAccessibleChild(0);
if (o instanceof JComponent) {
JComponent c = (JComponent) o;
c.setBorder(new BottomRoundedCornerBorder());
c.setForeground(FOREGROUND);
c.setBackground(BACKGROUND);
}
}
};
}}
* Reference [#reference]
- [[JTextFieldの角を丸める>Swing/RoundedTextField]]
- [[JComboBoxの角を丸める>Swing/RoundedComboBox]]
- [[JScrollBarのArrowButtonを非表示にする>Swing/ArrowButtonlessScrollBar]]
* Comment [#comment]
#comment
#comment