Swing/ComboBoxBorder のバックアップ(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ComboBoxBorder へ行く。
- 1 (2012-02-20 (月) 16:53:02)
- 2 (2012-12-13 (木) 15:33:31)
- 3 (2013-03-26 (火) 18:31:48)
- 4 (2015-01-20 (火) 15:51:37)
- 5 (2015-02-20 (金) 13:18:41)
- 6 (2016-05-31 (火) 15:12:06)
- 7 (2017-03-30 (木) 14:04:46)
- 8 (2017-04-07 (金) 13:51:51)
- 9 (2018-03-09 (金) 13:15:06)
- 10 (2018-10-06 (土) 23:24:10)
- 11 (2020-10-03 (土) 14:14:08)
- 12 (2021-11-16 (火) 08:19:37)
- 13 (2025-01-03 (金) 08:57:02)
- 14 (2025-01-03 (金) 09:01:23)
- 15 (2025-01-03 (金) 09:02:38)
- 16 (2025-01-03 (金) 09:03:21)
- 17 (2025-01-03 (金) 09:04:02)
- 18 (2025-06-19 (木) 12:41:37)
- 19 (2025-06-19 (木) 12:43:47)
TITLE:JComboBoxのBorderを変更する
Posted by aterai at 2012-02-20
JComboBoxのBorderを変更する
`JComboBoxの表示部分、矢印ボタン、ドロップダウンリストのBorder`や色を変更します。
- &jnlp;
- &jar;
- &zip;
サンプルコード
//ComboBox.border
UIManager.put("ComboBox.border", BorderFactory.createLineBorder(Color.WHITE));
//ArrowButton
combo.setUI(new BasicComboBoxUI() {
@Override protected JButton createArrowButton() {
JButton b = new JButton(new ArrowIcon()); //.createArrowButton();
b.setBackground(Color.BLACK);
b.setContentAreaFilled(false);
b.setFocusPainted(false);
b.setBorder(BorderFactory.createEmptyBorder());
return b;
}
});
//DropDownList
Object o = combo.getAccessibleContext().getAccessibleChild(0);
((JComponent)o).setBorder(BorderFactory.createMatteBorder(0,1,1,1,Color.WHITE));
View in GitHub: Java, Kotlin解説
- 上: `
MetalComboBoxUI`- `
UIManager.put("ComboBox.border", border)などで、Borderを変更しているが、UI`独自の余白?を消すことができない
- `
- 中: `
BasicComboBoxUI`- `
MetalComboBoxUIなどにあった余白は消すことができるが、ComboBox.buttonDarkShadowがArrowButton`の三角とボタンの影に使用されているため、両方を一度に非表示にすることができない
- `
- 下: `
BasicComboBoxUI#createArrowButton()`- `
BasicComboBoxUI#createArrowButton()をオーバーライドして、独自のアイコンをもつJButton`を使用するように変更 - `
JComboBoxにMouseListenerを追加して、マウスカーソルがJComboBox内にある場合、ArrowButtonがHover`表示されるように設定
- `
combo.addMouseListener(new MouseAdapter() {
private ButtonModel getButtonModel(MouseEvent e) {
JComboBox cb = (JComboBox)e.getSource();
JButton b = (JButton)cb.getComponent(0);
return b.getModel();
}
@Override public void mouseEntered(MouseEvent e) {
getButtonModel(e).setRollover(true);
}
@Override public void mouseExited(MouseEvent e) {
getButtonModel(e).setRollover(false);
}
@Override public void mousePressed(MouseEvent e) {
getButtonModel(e).setPressed(true);
}
@Override public void mouseReleased(MouseEvent e) {
getButtonModel(e).setPressed(false);
}
});
java - How do you change border of the pop up section of a JComboBox? - Stack Overflow を参考にして、`JComboBoxから以下のように、BasicComboPopupを取得し、MatteBorder`を設定
Object o = combo.getAccessibleContext().getAccessibleChild(0);
((JComponent)o).setBorder(BorderFactory.createMatteBorder(0,1,1,1,Color.WHITE));
参考リンク
- java - How do you change border of the pop up section of a JComboBox? - Stack Overflow
- JComboBoxの内余白
