java - 禁用的 JComboBox 中更好的可读性/对比度

标签 java swing visibility jcombobox disabled-control

我有一个 JComboBox 需要在某些时候被禁用,但我觉得 disabled 状态使得它很难阅读,因为它的对比度很低。

如果只有下拉箭头按钮显示为禁用状态,同时保持框渲染器保持启用状态,那就太好了。

实际:actual combo所需:desired result

有没有简单的方法来实现这个或类似的东西?

谢谢!

最佳答案

我最终浏览了 BasicComboBoxUI,在那里我发现了这个:

        if ( comboBox.isEnabled() ) {
            c.setForeground(comboBox.getForeground());
            c.setBackground(comboBox.getBackground());
        }
        else {
            c.setForeground(DefaultLookup.getColor(
                     comboBox, this, "ComboBox.disabledForeground", null));
            c.setBackground(DefaultLookup.getColor(
                     comboBox, this, "ComboBox.disabledBackground", null));
        }

因此,我将 JLabel 用作渲染器组件,并重写了 setForeground 方法以不执行任何操作。因此,颜色永远不会改变并保持默认的黑色值。

问题在于这个技巧是特定于实现的。给定的 Look&Feel 或 UI Manager 可能会做其他事情,比如用半透明层覆盖以显示禁用的项目,而不是更改组件的颜色:-(

如果安装的 L&F 或 UI 管理器不调用 setForeground 方法,也许测试至少可以发出警告。

关于java - 禁用的 JComboBox 中更好的可读性/对比度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4827635/

相关文章:

java - 动画横幅从左向右滑动(屏幕外到屏幕上)

java - 如何将 Java 作用域限制为子类?

java - LinkedList 中重复错误

java - 这种非标准的 Java 同步模式有效吗?

Android Activity 默认不可见

java - 如何让JComboBox中的内容居中显示?

Java BorderLayout 不起作用,JPanel 不会按照我希望的方式移动

java - 自定义最大化、最小化按钮

wpf - 如何从布局中删除 Dockpanel 内的按钮 - WPF

Android: View 可见性设置为 View.VISIBLE 但 View 不可见