【问题标题】:Can I modify JComboBox popup background color of an existing object?我可以修改现有对象的 JComboBox 弹出背景颜色吗?
【发布时间】:2010-11-12 09:00:54
【问题描述】:

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

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

【问题讨论】:

  • 我的问题与上面的链接问题不同(错误地指出这个问题已经有了答案):该问题询问了 所选项目 的 bgcolor (在组合框的编辑框中);我在问弹出框的bgcolor。
  • 另一个问题 [1] 是在我的之后发布的 - 当我发布我的时它并不存在。至于答案,虽然我接受的答案没有直接回答我的问题(而是另一个问题),但它确实指出了解决问题的明显正确(并且可能是唯一的)方式,即创建一个专门的单元格渲染器类。自从我发布我的问题以来,这个月没有人给出更好的答案,所以我认为它足够接近并接受了答案。 [1]:stackoverflow.com/questions/4412902/…

标签: java swing popup jcombobox


【解决方案1】:

正如 eugener 所说,使用自定义 ListCellRenderer 绝对是正确的方法。您只需要创建一个扩展DefaultListCellRenderer 的类。这个默认渲染器扩展了JLabel,所以它再容易理解了!您只需拨打电话至setBackground()

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);
    }
});

【讨论】:

  • 如上所述 - 我希望避免创建自定义类。但是,由于这是迄今为止最好的答案,我已经接受了它 - 也许真的没有其他方法可以做我需要的事情。感谢大家的努力。
  • 我很高兴有帮助。在某种程度上,像我所做的那样使用匿名类消除了创建新 Java 类的需要,这部分是您所暗示的,但实际上无需担心创建新类一般。如果您需要自定义功能,请创建一个自定义类来执行此操作,以便可以重用它。这就是 OOP 的工作原理! :)
【解决方案2】:

您必须创建一个自定义组合框渲染器。更多信息在这里: http://download.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer

【讨论】:

  • 如上所述 - 我希望避免创建自定义类。有没有办法使用现有的属性/方法访问弹出组件?
  • 这不会有帮助,因为默认渲染器无论如何都会在它上面渲染。
【解决方案3】:

你试过了吗:

comboBox.setBackground(color);

【讨论】:

  • 不,那是组合本身的背景,而不是弹出窗口。
猜你喜欢
  • 2021-02-08
  • 2012-05-02
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 2017-11-10
  • 1970-01-01
相关资源
最近更新 更多