GridBagLayout中的JComboBox宽度问题

时间:2012-06-25 04:38:36

标签: java swing jcombobox gridbaglayout

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

例如,它显示'医疗成分'的'医疗保健成分'。

请看一下截图:

JComboBox width issue

代码是这样的:

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会引入一些意图并导致对齐问题,但仍然不完美:
  3. 第二个解决方案的代码:

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

    我的问题是:还有其他简单方法可以解决这个问题吗?

    环境:带有JDK 1.6_25(64位版本)的Windows 7

    非常感谢

2 个答案:

答案 0 :(得分:7)

答案 1 :(得分:0)

自己解决这个问题。

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

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

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

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

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

由于