包含Icon的JComboBox在Mac上太小了

时间:2011-07-02 13:21:29

标签: java swing macos icons jcombobox

我目前正在开发一个Swing应用程序,它将在每个平台上执行。一般应用程序不是问题,它在Windows,Linux和Mac上运行良好。

但我有JComboBox除了文字外还显示Icon(大小为50x50)。 我明白,Mac有严格的布局规则,并且超大JComboBoxes并不是真正想要的。 问题是,使用Mac Look-and-Feel,我的JComboBoxes具有正确的宽度但高度太小(高度相同,就好像没有图标一样)。因此,我的Icon的顶部和底部被切断,这看起来并不好看。

显示没有JComboBox的{​​{1}}没有意义,但到目前为止我还没有找到解决方案来显示Icon正确的高度(甚至设置JComboBox },MinimumSizePreferredSizeMaximumSize无效)。使用Windows或Linux,icon.getIconHeight()+2显示正确。

是否有任何我可以使用的财产,或者我真的需要使用截断图标吗?

1 个答案:

答案 0 :(得分:4)

使用How to Use Combo Boxes中显示的CustomComboBoxDemo,自定义渲染器按预期工作;但UI委托com.apple.laf.AquaComboBoxUI忽略了这样的请求:

petList.setPreferredSize(new Dimension(200, 130));

enter image description here

作为替代方案,javax.swing.plaf.metal.MetalComboBoxUI会产生如下所示的结果。请注意,箭头和滚动条(未显示)保持不变。另外,箭头可能会更改,如here所示。

附录:您可以更改UI默认值 ad lib ,如下所示。

//Create the combo box.
JComboBox petList = new JComboBox(intArray);
Color bg = (Color) UIManager.get("ComboBox.background");
Color fg = (Color) UIManager.get("ComboBox.foreground");
UIManager.put("ComboBox.selectionBackground", bg);
UIManager.put("ComboBox.selectionForeground", fg);
petList.setUI(new MetalComboBoxUI());
ComboBoxRenderer renderer = new ComboBoxRenderer();

....

enter image description here