Java 调整jcombobox下拉菜单的宽度

Java 调整jcombobox下拉菜单的宽度,java,jcombobox,Java,Jcombobox,有没有办法调整JCombobox的下拉窗口大小 假设我有: comArmor.setBounds(81, 102, 194, 26); 但是,当用户选择该框并弹出下拉列表时,我希望下拉窗口能够展开,以便完整地显示一长行文本(例如,大小x为300) 这可能吗?不确定是否已经有了内置的功能,但是您可以始终拥有一个ActionListener,它侦听选择的更改,然后在更改时以编程方式将JComboBox的宽度设置为所选内容的长度() box.addActionListener (new Action

有没有办法调整JCombobox的下拉窗口大小

假设我有:

comArmor.setBounds(81, 102, 194, 26);
但是,当用户选择该框并弹出下拉列表时,我希望下拉窗口能够展开,以便完整地显示一长行文本(例如,大小x为300)


这可能吗?

不确定是否已经有了内置的功能,但是您可以始终拥有一个
ActionListener
,它侦听选择的更改,然后在更改时以编程方式将
JComboBox
的宽度设置为所选内容的长度()

box.addActionListener (new ActionListener () {
    public void actionPerformed(ActionEvent e) {
        String item = comboBox.getSelectedItem().toString();
        comboBox.setBounds(81, 102, item.length * CONSTANT, 26);
    }
});
对我来说,这似乎有点老套,你可能不得不玩弄这个想法才能让它发挥作用

我希望这对你有帮助

更新:

JComboBox似乎有一种方法,用于根据参数的长度计算组件的首选宽度

设置用于计算UI部分显示大小的原型显示值

我可能会考虑用这个方法。

小黑客得到弹出菜单的大小足够大,以显示项目,即使组合框的大小可以更小

资料来源:

导入java.awt.Dimension;
导入java.util.Vector;
导入javax.swing.ComboxModel;
导入javax.swing.JComboBox;
公共类ComboxFullMenu扩展了JComboBox{
公共ComboxFullMenu(E[]项){
超级(项目);
addActionListener(此);
}
公共ComboxFullMenu(矢量项){
超级(项目);
addActionListener(此);
}
公共ComboBoxFullMenu(ComboBoxModel aModel){
超级(阿莫代尔);
addActionListener(此);
}
/**
*小黑客得到弹出菜单的大小足够大,以显示项目,即使
*组合框的大小可以更小
* */
私有布尔layingOut=false;
@凌驾
public void doLayout(){
试试{
layingOut=真;
super.doLayout();
}最后{
layingOut=假;
} 
} 
@凌驾
公共维度getSize(){
维度dim=super.getSize();
如果(!layingOut){
dim.width=Math.max(dim.width,getPreferredSize().width);
}
返回暗淡;
}
}
    import java.awt.Dimension;
    import java.util.Vector;

    import javax.swing.ComboBoxModel;
    import javax.swing.JComboBox;

    public class ComboBoxFullMenu<E> extends JComboBox<E> {

        public ComboBoxFullMenu(E[] items) {
            super(items);
            addActionListener(this);
        }

        public ComboBoxFullMenu(Vector<E> items) {
            super(items);
            addActionListener(this);
        }

        public ComboBoxFullMenu(ComboBoxModel<E> aModel) {
            super(aModel);
            addActionListener(this);
        }

        /**
         * Small hack to get pop up menu size bigger enough to show items even though
         * the combo box size could be smaller
         * */
        private boolean layingOut = false; 

        @Override
        public void doLayout(){ 
            try{ 
                layingOut = true; 
                super.doLayout(); 
            }finally{ 
                layingOut = false; 
            } 
        } 

        @Override
        public Dimension getSize(){ 
            Dimension dim = super.getSize(); 
            if ( !layingOut ) {
                dim.width = Math.max(dim.width, getPreferredSize().width);
            }
            return dim; 
        }
    }