Java GridBagLayout中的JComboBox宽度问题

Java GridBagLayout中的JComboBox宽度问题,java,swing,jcombobox,gridbaglayout,Java,Swing,Jcombobox,Gridbaglayout,当我将JComboBox放入带有GridBagLayout的JPanel中时,我发现最长的JComboBox项不会完全显示,而是显示带有“…”的部分内容 例如,它在“保健成分”中显示“Healthcare Ingred…” 请查看此处的屏幕截图: 代码是这样的: JPanel infoPanel = JPanel(new GridBagLayout()); dataTypeCB = new JComboBox(dataTypeList.toArray()); infoP

当我将JComboBox放入带有GridBagLayout的JPanel中时,我发现最长的JComboBox项不会完全显示,而是显示带有“…”的部分内容

例如,它在“保健成分”中显示“Healthcare Ingred…”

请查看此处的屏幕截图:

代码是这样的:

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和JDK 1.6_25(64位版本)


    非常感谢你能亲自解决这个问题

    我之所以得到这个结果,是因为我使用了一个名为“JIDE”的库,它将它的外观和感觉带到了我的应用程序中

    我测试了JDK的默认外观,它们的外观没有这个问题。 然后我切换到JIDE的外观,然后我可以复制这个问题

    所以我认为问题与外观和感觉有关。ComboBoxUI类

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

    很抱歉,我并没有提供足够的信息,当我问这个问题时,我并没有意识到它和LookAndFeel有关


    谢谢你的回答,这是否意味着我需要检查所有项目,找到最长的项目,然后设置PrototypeDisplayValue?非常感谢
    找到最长的一个
    应该是最好的选择,或者设置严格的大小
    (“XXXXXXXXXXXXXXXXXXXXX”)
    来显示大多数…,让我们调整大小为+1,我最近刚从你那里学到,这个方法是多么奇妙:-)@mKorbel谢谢你的评论。我使用渲染器获取显示名称,JComboBox中的项目实际上只是ID。是的,我可以先得到显示名称,然后得到最长的,再得到尺寸,但是看起来还是很痛苦的嗯。。。尺寸要求在内部计算为最宽项目的尺寸,这似乎与您的屏幕截图中预期的一样。可能是selectedItem的呈现程序(即组合本身)使用的字体比下拉列表的字体稍大吗?顺便说一句,最好提供SSCCE来演示问题。