【发布时间】:2012-06-26 08:51:42
【问题描述】:
当我使用 GridBagLayout 将 JComboBox 放入 JPanel 时,我发现最长的 JComboBox 项目不会完全显示,而是显示部分带有 '...'
例如,它为“保健成分”显示“保健成分...”。
请看这里的截图:
代码是这样的:
JPanel infoPanel = JPanel(new GridBagLayout());
dataTypeCB = new JComboBox(dataTypeList.toArray());
infoPanel.add(dataTypeCB, new GridBagConstraints(1, 1, 1, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0, 0));
我已经找到了两个解决方案:
- 覆盖JComboBox的getPreferenceSize,不过有点烦。
- 用 JPanel 包装 JComboBox,如下所示,但是扭曲的 JPanel 引入了一些意图并导致对齐问题,仍然不完美:
第二种解决方案的代码:
dataTypeCB = new JComboBox(dataTypeList.toArray());
JPanel dataTypeCBPanel = new JPanel();//make item can be fully show up.
dataTypeCBPanel.add(dataTypeCB, BorderLayout.CENTER);
infoPanel.add(dataTypeCBPanel, new GridBagConstraints(1, 1, 1, 1, 1, 0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,5,5,5), 0, 0));
我的问题是:还有其他简单的方法可以解决这个问题吗?
环境:windows 7 with JDK 1.6_25(64bit version)
非常感谢
【问题讨论】:
-
hmm ...尺寸要求在内部计算为最宽项目的要求,这似乎在您的屏幕截图中按预期工作。可能是 selectedItem 的渲染器(即组合本身)使用的字体比下拉列表稍大吗?顺便说一句,最好提供 SSCCE 来证明问题。
标签: java swing jcombobox gridbaglayout