调整jcombobox下拉菜单的宽度

时间:2015-03-15 05:11:11

标签: java jcombobox

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

让我说我有:

comArmor.setBounds(81, 102, 194, 26);

但是当用户选择该框并弹出下拉列表时,我希望下拉窗口能够展开,以便完整显示一长行文本(比如x的大小为300) )。

这可能吗?

2 个答案:

答案 0 :(得分:2)

enter image description here

即使组合框尺寸较小,弹出菜单大小足以显示项目的小黑客

来源:http://www.jroller.com/santhosh/entry/make_jcombobox_popup_wide_enough

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

答案 1 :(得分:0)

不确定是否已有内置功能,但您可以始终拥有一个ActionListener来监听选择更改,然后以编程方式将JComboBox的宽度设置为所选的长度内容(getSelectedItem())何时发生变化。

box.addActionListener (new ActionListener () {
    public void actionPerformed(ActionEvent e) {
        String item = comboBox.getSelectedItem().toString();
        comboBox.setBounds(81, 102, item.length * CONSTANT, 26);
    }
});

对我来说这似乎有些笨拙,你可能不得不玩弄这个想法让它发挥作用。

我希望这可以帮到你!

<强>更新

JComboBox似乎有一个setPrototypeDisplayValue(Object)方法,用于根据参数的长度计算组件的首选宽度。

  

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

我可能会考虑改用它。