我目前正在开发一个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忽略了这样的请求:
原文链接:https://www.f2er.com/java/437862.htmlpetList.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();
....