java – 包含Icon的JComboBox在Mac上太小了

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

我有这个JComboBox除了文本还显示图标(大小50×50).
我明白,Mac有严格的布局规则,并且不需要超大的JComboBox.
问题是,使用Mac外观,我的JComboBoxes具有正确的宽度,但高度太小(相同的高度,就像没有图标一样).因此,我的Icon的顶部和底部被剪掉了,这看起来并不好看.

显示没有Icon的JComboBox没有意义,但到目前为止我还没有找到一个解决方案来显示具有正确高度的JComboBox(甚至设置MinimumSize,PreferredSize和MaximumSize为icon.getIconHeight()2没有帮助).使用Windows或Linux,JComboBox会正确显示.

有没有我可以使用的财产,或者我真的必须忍受切断的图标?

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

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

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

附录:您可以更改UI认值,如下所示.

//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();

....

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...