我有一个 JComboBox 需要在某些时候被禁用,但我觉得 disabled
状态使得它很难阅读,因为它的对比度很低。
如果只有下拉箭头按钮显示为禁用状态,同时保持框渲染器保持启用状态,那就太好了。
实际:所需:
有没有简单的方法来实现这个或类似的东西?
谢谢!
最佳答案
我最终浏览了 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/