Swing/RoundedScrollPane のバックアップ差分(No.3)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - 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 --- * 概要 [#summary] `JScrollPane`に角丸表示をおこなうための`Border`を設定します。 #download(https://drive.google.com/uc?id=1po7Hxu9X7xIcMO6Vs6YOZkzbZmMqyrN3) * サンプルコード [#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()); }} * 解説 [#explanation] - `JScrollPane` -- `JScrollPane`に`RoundedCornerBorder`を設定して角を丸める -- `JScrollPane`の背景色を内部に配置したコンポーネントの背景色と同じ色に変更 -- `JScrollBar`の角を丸めて矢印ボタンを非表示化 -- 参考: [[JTextFieldの角を丸める>Swing/RoundedTextField]] - `JComboBox` -- ドロップダウンリストに使用される`JScrollPane`ではなく`JPopupMenu`に`BottomRoundedCornerBorder`を設定 --- 直接`JScrollPane`に`BottomRoundedCornerBorder`を設定しても無効? -- `BasicComboPopup#createScroller()`をオーバーライドし`JScrollBar`の角を丸めて矢印ボタンを非表示化 -- 参考: [[JComboBoxの角を丸める>Swing/RoundedComboBox]] -- [[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() { @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); } } }; }} * 参考リンク [#reference] - [[JTextFieldの角を丸める>Swing/RoundedTextField]] - [[JComboBoxの角を丸める>Swing/RoundedComboBox]] - [[JScrollBarのArrowButtonを非表示にする>Swing/ArrowButtonlessScrollBar]] * コメント [#comment] #comment #comment