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

Pau*_*ers 6 java swing jcombobox

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

替代文字

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

Cos*_*lis 9

这应该工作

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


cam*_*ckr 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);
Run Code Online (Sandbox Code Playgroud)

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