【发布时间】:2011-05-23 17:03:28
【问题描述】:
不可编辑的 JComboBox 中选中项的背景颜色是一种蓝色:
有什么办法可以让它变成不同的颜色,比如白色?
【问题讨论】:
-
相关,可能重复,无法确定:stackoverflow.com/questions/10258224/…
不可编辑的 JComboBox 中选中项的背景颜色是一种蓝色:
有什么办法可以让它变成不同的颜色,比如白色?
【问题讨论】:
这对我有用:
myComboBox.setBackground(Color.RED);
myComboBox.repaint();
【讨论】:
渲染器分配的背景被组合框的弹出窗口中使用的 JList 的选择背景颜色覆盖。查看 BasicComboBoxUI 类的“paintCurrentValue”方法。所以解决方法是:
JComboBox comboBox = new JComboBox(...);
Object child = comboBox.getAccessibleContext().getAccessibleChild(0);
BasicComboPopup popup = (BasicComboPopup)child;
JList list = popup.getList();
list.setSelectionBackground(Color.RED);
这也会影响弹出窗口的呈现。如果您不希望它影响弹出窗口,那么您将需要创建一个自定义渲染器来专门设置所选项目的背景。
【讨论】:
这应该可以工作
jComboBox1.setRenderer(new DefaultListCellRenderer() {
@Override
public void paint(Graphics g) {
setBackground(Color.WHITE);
setForeground(Color.BLACK);
super.paint(g);
}
});
【讨论】:
您是否尝试过编写自己的自定义 ListCellRenderer?
当要求该方法提供单元格渲染组件时,您会得到以下参数:
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
【讨论】: