我有一个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似乎是唯一忽略规范那部分的浏览器。 解决方法是将您
问题内容: 我正在JSP中创建一个页面,其中有一个下拉列表,一旦用户选择了一个值,他就必须单击go按钮,然后将该值发送到Servlet。 我该如何做才能在变更时做到呢?例如,当用户选择John时,将从数据库中检索出他的所有详细信息并显示出来。我希望系统无需单击“执行”按钮即可执行此操作。 问题答案: 只需询问JavaScript的帮助。
问题内容: 在IE中,下拉列表的宽度与下拉框相同(我希望我有道理),而在Firefox中,下拉列表的宽度根据内容而有所不同。 这基本上意味着我必须确保该保管箱足够宽,以显示可能的最长选择。这使我的页面看起来非常难看:( 有没有解决此问题的方法?如何使用CSS为Dropbox和dropdownlist设置不同的宽度? 问题答案: 这是另一个基于jQuery的示例。与此处发布的所有其他答案相反,它考虑
是的,所以我不知道我在做什么。哈。 我想改变select2的未打开的下拉菜单的颜色(也许还有边上的按钮),但是寻找解决方案只是设法阻碍了我 这样可以更改选项(这很好!)但并不是我想要的100%。 有没有改变下拉初始状态颜色的类