当前位置: 首页 > 面试题库 >

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

糜淇
2023-03-14
问题内容

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

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

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

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

这是我要实现的目标:

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

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


问题答案:

我相信使用公共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());
  }
}


 类似资料:
  • 问题内容: 我有一个列表框,我想减小其宽度。 这是我的代码: 此代码在IE 6上有效,但在Mozilla Firefox(最新版本)中无效。有人可以告诉我如何减少Firefox上的下拉列表吗? 问题答案: 试试这个代码: CSS: 如果要更改选项的宽度,可以在CSS中执行以下操作: 也许您的CSS规则中有一个冲突,该冲突覆盖了您选择的宽度

  • 问题内容: 基本上是弹出用于JComboBox中显示其衍生的JTextField下面,如何从怒吼取向为JcomboBox的弹出改变方向并在顶/显示JcomboBox的弹出超过该 编辑:基本JComboBox的代码示例 编辑第二。MacOX的代码 问题答案: 尝试在“ 组合框弹出”中找到的setPopupAbove()方法。

  • 问题内容: 我有一个下拉列表,列出了字体系列。像Tahoma,Arial,Verdana等。我想根据其代表的值更改每个下拉项的字体系列。就像Photoshop一样。 我更改了每个下拉项的CSS,但仅适用于FireFox。它不能在任何其他浏览器上使用。 我不想使用任何jQuery插件。 问题答案: 这是因为子元素()并非真正可样式化,而Firefox似乎是唯一忽略规范那部分的浏览器。 解决方法是将您

  • 问题内容: 在IE中,下拉列表的宽度与下拉框相同(我希望我有道理),而在Firefox中,下拉列表的宽度根据内容而有所不同。 这基本上意味着我必须确保该保管箱足够宽,以显示可能的最长选择。这使我的页面看起来非常难看:( 有没有解决此问题的方法?如何使用CSS为Dropbox和dropdownlist设置不同的宽度? 问题答案: 这是另一个基于jQuery的示例。与此处发布的所有其他答案相反,它考虑

  • 问题内容: 我正在JSP中创建一个页面,其中有一个下拉列表,一旦用户选择了一个值,他就必须单击go按钮,然后将该值发送到Servlet。 我该如何做才能在变更时做到呢?例如,当用户选择John时,将从数据库中检索出他的所有详细信息并显示出来。我希望系统无需单击“执行”按钮即可执行此操作。 问题答案: 只需询问JavaScript的帮助。

  • 是的,所以我不知道我在做什么。哈。 我想改变select2的未打开的下拉菜单的颜色(也许还有边上的按钮),但是寻找解决方案只是设法阻碍了我 这样可以更改选项(这很好!)但并不是我想要的100%。 有没有改变下拉初始状态颜色的类