4

当我将 JComboBox 放入带有 GridBagLayout 的 JPanel 时,我发现最长的 JComboBox 项目不会完全显示,而是显示部分带有 '...'

例如,它为“保健成分”显示“保健成分...”。

请看这里的截图:

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

我已经找到了两个解决方案:

  1. 覆盖JComboBox的getPreferenceSize,不过有点烦人。
  2. 用 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)

非常感谢

4

2 回答 2

7

看看JComboBox.setPrototypeDisplayValue()

于 2012-06-25T04:50:52.010 回答
0

自己解决这个问题。

我得到这个的原因是因为我使用了一个名为“JIDE”的库,它将它的 LookAndFeel 带入了我的应用程序。

我在JDK的默认外观上测试过,他们看起来没有这个问题。然后我切换到 JIDE 的外观和感觉,然后我可以重现这个问题。

所以我认为这个问题与 LookAndFeel 有关。ComboBoxUI 类。

所以我真正需要做的是编写自己的 ComboBoxUI 或扩展 JIDE 库中的 UI 类。

抱歉没有提供足够的信息,当我问问题时,我没有意识到它与 LookAndFeel 有关。

谢谢

于 2012-08-31T03:57:55.707 回答