【问题标题】:JComboBox width issue in GridBagLayoutGridBagLayout 中的 JComboBox 宽度问题
【发布时间】: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));

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

  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)

非常感谢

【问题讨论】:

  • hmm ...尺寸要求在内部计算为最宽项目的要求,这似乎在您的屏幕截图中按预期工作。可能是 selectedItem 的渲染器(即组合本身)使用的字体比下拉列表稍大吗?顺便说一句,最好提供 SSCCE 来证明问题。

标签: java swing jcombobox gridbaglayout


【解决方案1】:

自己解决这个问题。

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

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

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

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

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

谢谢

【讨论】:

    【解决方案2】:

    【讨论】:

    • 感谢回答,这是否意味着我需要遍历所有项目,找到最长的项目,然后设置原型显示值?非常感谢
    • find the longest one 应该是最好的选择或设置严格的大小("XXXXXXXXXXXXXXXXXXXX") 以显示大多数...,让我们调整JComboBoxes JPopup的大小
    • +1,我最近从你那里学到了,这个方法真是太棒了:-)
    • @mKorbel 感谢 cmets。我正在使用渲染器来获取显示名称,JComboBox 中的项目实际上只是 id。是的,我可以先得到显示名称,然后得到最长的,得到大小,但似乎仍然很痛苦
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 2011-12-10
    • 2014-02-23
    相关资源
    最近更新 更多