我目前正在开发一个Swing应用程序,它将在每个平台上执行。一般应用程序不是问题,它在Windows,Linux和Mac上运行良好。
但我有JComboBox
除了文字外还显示Icon
(大小为50x50)。
我明白,Mac有严格的布局规则,并且超大JComboBoxes
并不是真正想要的。
问题是,使用Mac Look-and-Feel
,我的JComboBoxes
具有正确的宽度但高度太小(高度相同,就好像没有图标一样)。因此,我的Icon
的顶部和底部被切断,这看起来并不好看。
显示没有JComboBox
的{{1}}没有意义,但到目前为止我还没有找到解决方案来显示Icon
正确的高度(甚至设置JComboBox
},MinimumSize
和PreferredSize
到MaximumSize
无效)。使用Windows或Linux,icon.getIconHeight()+2
显示正确。
是否有任何我可以使用的财产,或者我真的需要使用截断图标吗?
答案 0 :(得分:4)
使用How to Use Combo Boxes中显示的CustomComboBoxDemo
,自定义渲染器按预期工作;但UI委托com.apple.laf.AquaComboBoxUI
忽略了这样的请求:
petList.setPreferredSize(new Dimension(200, 130));
作为替代方案,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();
....