如何更改JComboBox下拉列表的宽度?

丹尼尔·里科夫斯基(Daniel Rikowski):

我有一个JComboBox包含单个字母值列表的可编辑文件。因此,组合框非常小。

每个字母都有特殊的含义,在很少使用的字母的情况下,有时对用户来说并不清楚。因此,我创建了一个自定义ListCellRenderer该自定义显示了下拉列表中每个字母的含义。

不幸的是,此解释不适合下拉菜单,因为它太小了,因为它的宽度与组合框相同。

有什么方法可以使下拉列表比组合框更宽?

这是我要实现的目标:

 ---------------------
| Small JCombobox | V |
 --------------------------------------------
| "Long item 1"                              |
 --------------------------------------------
| "Long item 2"                              |
 --------------------------------------------
| "Long item 3"                              |
 --------------------------------------------

我无法更改组合框的宽度,因为该应用程序是对旧的旧式应用程序的重新创建,其中某些事情必须与以前完全相同。(在这种情况下,组合框必须不惜一切代价保持其较小的尺寸)

迈克尔·迈尔斯(Michael Myers):

我相信使用公共API进行此操作的唯一方法是编写自定义UI(有两个 bug可以解决此问题)。

如果您只想要一些简单的东西,我发现了这种使用实现细节的方法(在此处):

public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
    JComboBox box = (JComboBox) e.getSource();
    Object comp = box.getUI().getAccessibleChild(box, 0);
    if (!(comp instanceof JPopupMenu)) return;
    JComponent scrollPane = (JComponent) ((JPopupMenu) comp).getComponent(0);
    Dimension size = new Dimension();
    size.width = box.getPreferredSize().width;
    size.height = scrollPane.getPreferredSize().height;
    scrollPane.setPreferredSize(size);
    //  following line for Tiger
    // scrollPane.setMaximumSize(size);
}

PopupMenuListener放进可能对你有用。

或者,您可以使用第一个链接的bug中的代码

class StyledComboBoxUI extends BasicComboBoxUI {
  protected ComboPopup createPopup() {
    BasicComboPopup popup = new BasicComboPopup(comboBox) {
      @Override
      protected Rectangle computePopupBounds(int px,int py,int pw,int ph) {
        return super.computePopupBounds(
            px,py,Math.max(comboBox.getPreferredSize().width,pw),ph
        );
      }
    };
    popup.getAccessibleContext().setAccessibleParent(comboBox);
    return popup;
  }
}

class StyledComboBox extends JComboBox {
  public StyledComboBox() {
    setUI(new StyledComboBoxUI());
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章