Swing/ComboBoxForegroundColor のバックアップ(No.13)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/ComboBoxForegroundColor へ行く。
- 1 (2011-03-15 (火) 14:10:48)
- 2 (2011-03-24 (木) 16:28:09)
- 3 (2012-02-07 (火) 16:47:26)
- 4 (2012-12-23 (日) 05:41:16)
- 5 (2014-02-19 (水) 02:29:49)
- 6 (2014-02-23 (日) 19:50:46)
- 7 (2014-11-15 (土) 00:49:52)
- 8 (2015-12-12 (土) 02:18:33)
- 9 (2017-03-08 (水) 13:02:03)
- 10 (2018-01-10 (水) 18:02:32)
- 11 (2018-12-21 (金) 14:07:43)
- 12 (2020-11-19 (木) 14:40:15)
- 13 (2023-01-06 (金) 17:32:14)
- category: swing folder: ComboBoxForegroundColor title: JComboBoxの文字色を変更する tags: [JComboBox, ListCellRenderer, Html] author: aterai pubdate: 2011-02-14T15:46:36+09:00 description: JComboBoxに選択中のセルアイテム文字色を変更するセルレンダラーを設定します。 image:
概要
JComboBox
に選択中のセルアイテム文字色を変更するセルレンダラーを設定します。
Screenshot
Advertisement
サンプルコード
class ComboForegroundRenderer extends DefaultListCellRenderer {
private static final Color SELECTION_BACKGROUND = new Color(240, 245, 250);
private final JComboBox combo;
public ComboForegroundRenderer(JComboBox combo) {
super();
this.combo = combo;
}
@Override public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean hasFocus) {
if (value instanceof ColorItem) {
ColorItem item = (ColorItem) value;
Color ic = item.color;
if (index < 0 && ic != null && !ic.equals(combo.getForeground())) {
combo.setForeground(ic); //Windows, Motif Look&Feel
list.setSelectionForeground(ic);
list.setSelectionBackground(SELECTION_BACKGROUND);
}
JLabel l = (JLabel) super.getListCellRendererComponent(
list, item.description, index, isSelected, hasFocus);
l.setForeground(ic);
l.setBackground(isSelected ? SELECTION_BACKGROUND
: list.getBackground());
return l;
} else {
super.getListCellRendererComponent(
list, value, index, isSelected, hasFocus);
return this;
}
}
}
View in GitHub: Java, Kotlin解説
- 上:
Default
- デフォルトのリストセルレンダラーを使用
- 中:
setForeground
ListCellRenderer
でJList
の選択時文字色(JList#setSelectionForeground(...)
)、選択時背景色(JList#setSelectionBackground(...)
)を変更XPStyle.getXP()!=null
なWindowsLookAndFeel
やMotifLookAndFeel
の場合フィールド部分の非選択時文字色はJComboBox
の文字色(getForeground()
)が使用されるため、セルレンダラーでJComboBox#setForeground(Color)
を使用
- 下:
Html tag
- 選択時背景色は上記の
setForeground
と同様にJList#setSelectionBackground
を使用 - セルレンダラーで文字色を
Html
タグで変更
- 選択時背景色は上記の
class ComboHtmlRenderer extends DefaultListCellRenderer {
private static final Color SELECTION_BACKGROUND = new Color(240, 245, 250);
@Override public Component getListCellRendererComponent(
JList list, Object value, int index,
boolean isSelected, boolean hasFocus) {
ColorItem item = (ColorItem) value;
if (index < 0) {
list.setSelectionBackground(SELECTION_BACKGROUND);
}
JLabel l = (JLabel) super.getListCellRendererComponent(
list, value, index, isSelected, hasFocus);
l.setText("<html><font color=" + hex(item.color) + ">" + item.description);
l.setBackground(isSelected ? SELECTION_BACKGROUND : list.getBackground());
return l;
}
private static String hex(Color c) {
return String.format("#%06x", c.getRGB() & 0xFF_FF_FF);
}
}