不可编辑的JComboBox中所选项目的背景颜色

时间:2010-12-10 20:14:07

标签: java swing jcombobox

不可编辑的JComboBox中所选项目的背景颜色是一种蓝色:

alt text

有没有办法让它变成不同的颜色,例如白色?

3 个答案:

答案 0 :(得分:9)

这应该有效

jComboBox1.setRenderer(new DefaultListCellRenderer() {
    @Override
    public void paint(Graphics g) {
        setBackground(Color.WHITE);
        setForeground(Color.BLACK);
        super.paint(g);
    }
});

答案 1 :(得分:6)

渲染器指定的背景将被组合框弹出窗口中使用的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);

这也会影响弹出窗口的渲染。如果您不希望它影响弹出窗口,则需要创建自定义渲染器以专门设置所选项目的背景。

答案 2 :(得分:3)

您是否尝试过编写自己的自定义ListCellRenderer

当要求该方法提供单元格渲染组件时,您将获得以下参数:

 public Component getListCellRendererComponent(JList list,
                                               Object value,
                                               int index,
                                               boolean isSelected,
                                               boolean cellHasFocus) {