Java 不可编辑JComboBox中所选项目的背景色
不可编辑JComboBox中所选项目的背景颜色为蓝色:Java 不可编辑JComboBox中所选项目的背景色,java,swing,jcombobox,Java,Swing,Jcombobox,不可编辑JComboBox中所选项目的背景颜色为蓝色: 有没有办法让它变成不同的颜色,例如白色?您是否尝试过编写自己的自定义的ListCellRenderer 当要求该方法提供单元渲染组件时,您将获得以下参数: public Component getListCellRendererComponent(JList list, Object value,
有没有办法让它变成不同的颜色,例如白色?您是否尝试过编写自己的自定义的
ListCellRenderer
当要求该方法提供单元渲染组件时,您将获得以下参数:
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean cellHasFocus) {
渲染器指定的背景由组合框弹出窗口中使用的JList的选择背景色覆盖。查看BasicComboxUI类的“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);
}
});
使用提供的代码aioob,将值强制转换为JLabel,并将其背景设置为您想要的颜色。是的,我尝试过。这可以更改菜单项在下拉框中显示时的外观。但是,它不会更改所选项目的外观。这仅适用于不需要重写CellRenderer的GetListCellRenderComponent方法的情况。如果必须这样做,请使用setSelectionBackground,如camickr的回答中所示。相关,可能重复,无法决定: