Swing/RoundedScrollPane のバックアップ(No.2)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/RoundedScrollPane へ行く。
- 1 (2020-05-18 (月) 15:12:11)
- 2 (2021-03-08 (月) 16:43:15)
- 3 (2021-03-09 (火) 14:48:39)
- 4 (2023-07-16 (日) 11:55:03)
- 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
概要
JScrollPane
に角丸表示をおこなうためのBorder
を設定します。
Screenshot
Advertisement
サンプルコード
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());
View in GitHub: Java, Kotlin解説
JScrollPane
JScrollPane
にRoundedCornerBorder
を設定して角を丸めるJScrollPane
の背景色を内部に配置したコンポーネントの背景色と同じ色に変更JScrollBar
の角を丸めて矢印ボタンを非表示化- 参考: JTextFieldの角を丸める
JComboBox
- ドロップダウンリストに使用される
JScrollPane
ではなくJPopupMenu
にBottomRoundedCornerBorder
を設定- 直接
JScrollPane
にBottomRoundedCornerBorder
を設定しても無効?
- 直接
BasicComboPopup#createScroller()
をオーバーライドしJScrollBar
の角を丸めて矢印ボタンを非表示化- 参考: JComboBoxの角を丸める
- ドロップダウンリストに使用される
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() {
@Override protected JButton createArrowButton() {
JButton b = new JButton(new ArrowIcon(BACKGROUND, FOREGROUND));
b.setContentAreaFilled(false);
b.setFocusPainted(false);
b.setBorder(BorderFactory.createEmptyBorder());
return b;
}
@Override protected ComboPopup createPopup() {
return new BasicComboPopup(comboBox) {
@Override protected JScrollPane createScroller() {
JScrollPane sp = new JScrollPane(list) {
@Override public void updateUI() {
super.updateUI();
getVerticalScrollBar().setUI(new WithoutArrowButtonScrollBarUI());
getHorizontalScrollBar().setUI(new WithoutArrowButtonScrollBarUI());
}
};
sp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
sp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
sp.setHorizontalScrollBar(null);
return sp;
}
};
}
});
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);
}
}
};