Java 我可以修改现有对象的JComboBox弹出窗口背景色吗?

Java 我可以修改现有对象的JComboBox弹出窗口背景色吗?,java,swing,popup,jcombobox,Java,Swing,Popup,Jcombobox,我有一个现有的JComboBox对象。我可以使用内部方法修改它的许多属性。然而,我找不到类似的方法来定制弹出窗口的外观——特别是弹出窗口的背景色。我有一个现有的对象,所以我希望使用它现有的方法/属性,而不是编写一个专用的类。这可能吗 注意:此问题与上面的链接问题不同(错误地表示此问题已经有答案):该问题询问了所选项目的颜色(在组合框的编辑框中);我在询问弹出框的颜色。您是否尝试过: comboBox.setBackground(color); 您必须创建一个自定义的comboxbox渲染器。详

我有一个现有的JComboBox对象。我可以使用内部方法修改它的许多属性。然而,我找不到类似的方法来定制弹出窗口的外观——特别是弹出窗口的背景色。我有一个现有的对象,所以我希望使用它现有的方法/属性,而不是编写一个专用的类。这可能吗

注意:此问题与上面的链接问题不同(错误地表示此问题已经有答案):该问题询问了所选项目的颜色(在组合框的编辑框中);我在询问弹出框的颜色。

您是否尝试过:

comboBox.setBackground(color);

您必须创建一个自定义的comboxbox渲染器。详情如下:

正如eugener所说,使用自定义的
ListCellRenderer
绝对是正确的方法。您只需要创建一个扩展
DefaultListCellRenderer
的类。此默认渲染器扩展了
JLabel
,因此不容易理解!您只需调用
setBackground()


不,这是combo本身的背景,而不是弹出窗口。正如我上面提到的,我希望避免创建自定义类。是否有任何方法可以使用现有属性/方法访问弹出组件?这不会有任何帮助,因为默认呈现程序将在弹出组件上进行渲染。如上所述,我希望避免创建自定义类。然而,由于这是迄今为止最好的答案,我接受了它——也许真的没有其他方法来做我需要的事情。谢谢大家的努力。我很高兴这能帮上忙。在某种程度上,使用我已经做过的匿名类消除了创建一个新Java类的需要,这在一定程度上就是您所暗示的,但是实际上,一般来说,不必担心创建一个新类。如果您需要自定义功能,请创建一个自定义类来实现它,以便可以重用它。这就是OOP的工作原理!:)我的问题与上面的链接问题不同(该问题错误地表示该问题已经有了答案):该问题询问了所选项目的bgcolor(在组合框的编辑框中);我问的是弹出框的背景颜色。另一个问题[1]是在我的问题之后发布的-当我发布我的问题时,它不存在。至于答案,虽然我接受的答案并没有直接回答我的问题(而是另一个问题),但它确实指出了解决问题的明显正确(而且可能是唯一的)方法,即创建一个专用的单元渲染器类。自从我发布我的问题以来,这个月没有人给出更好的答案,所以我觉得答案足够接近,并接受了答案。[1]:
JComboBox combo = new JComboBox(new String[] { "A", "B", "C", "D" });
combo.setRenderer(new DefaultListCellRenderer() {
    public void paint(Graphics g) {
        setBackground(Color.YELLOW);
        setForeground(Color.RED);
        super.paint(g);
    }
});