【问题标题】:Background color of the selected item in an uneditable JComboBox不可编辑的 JComboBox 中所选项目的背景颜色
【发布时间】:2011-05-23 17:03:28
【问题描述】:

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

有什么办法可以让它变成不同的颜色,比如白色?

【问题讨论】:

标签: java swing jcombobox


【解决方案1】:

这对我有用:

myComboBox.setBackground(Color.RED);
myComboBox.repaint();

【讨论】:

  • 请尽量给出正确的答案解释。
【解决方案2】:

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

这也会影响弹出窗口的呈现。如果您不希望它影响弹出窗口,那么您将需要创建一个自定义渲染器来专门设置所选项目的背景。

【讨论】:

    【解决方案3】:

    这应该可以工作

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

    【讨论】:

    • 只有在不需要重写 CellRenderer 的 getListCellRendererComponent 方法时才有效。如果您必须这样做,请使用 setSelectionBackground,就像在 camickr 的答案中显示的那样。
    【解决方案4】:

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

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

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

    【讨论】:

    • 使用提供的代码 aioob 并将值转换为 JLabel 并将其背景设置为您想要的颜色。
    • 是的,我试过了。这可以改变您在下拉框中看到的菜单项的外观。但是,它不会改变所选项目的外观。
    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    相关资源
    最近更新 更多