java下拉框设置长度_java – 如何更改JComboBox下拉列表的宽度?

更改JComboBox下拉列表宽度通常需要自定义UI,因为没有直接的公共API。可以通过监听popupMenuWillBecomeVisible事件并调整组件尺寸实现。另外,提供了一个StyledComboBoxUI和StyledComboBox的例子,用于在不支持公共API的情况下实现宽度调整。
摘要由CSDN通过智能技术生成

我相信用公共API来做这个的唯一方法是编写一个自定义UI(有

two

bugs处理这个)。

如果你只是想要一些快速的东西,我发现这样使用实现细节来做(here):

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);

}

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());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值