改变JCombobox的高度

时间:2013-12-19 14:05:43

标签: java swing jcombobox

是否可以增加JComboBox的高度?(不是指弹出菜单)

尝试过:

comboBox.setPreferredSize(new Dimension(200, 100));

Component[] comp = comboBox.getComponents();
for (int i = 0; i < comp.length; i++) {
    if (comp[i] instanceof JButton) {
        JButton btn = (JButton) comp[i];
        btn.setPreferredSize(new Dimension(200, 100));

    }
}

但没有运气。 然后我尝试用布局管理器解决问题:

JPanel panel = new JPanel(new GridBagLayout());
panel.setPreferredSize(new Dimension(100, 100));
GridBagConstraints c = new GridBagConstraints();
c.weighty = 1;
c.fill = GridBagConstraints.VERTICAL;
panel.add(cbox, c);

但这似乎没有改变JComboBox按钮的大小。

public class ComboBoxFontChange extends JFrame {

    public ComboBoxFontChange() {

        // CREATE BOX
        JComboBox<String> cbox = new JComboBox<String>();
        cbox.setFont(cbox.getFont().deriveFont(30.0f));

        // TRY CHANGE SIZE: DOSE NOT WORK..
        cbox.setPreferredSize(new Dimension(200, 100));
        cbox.setSize(new Dimension(200, 100));
        cbox.setMinimumSize(new Dimension(200, 100));

        // TRY CHANGE SIZE ON BUTTON INSTEAD: DOSE NOT WORK..
        Component[] comp = cbox.getComponents();
        for (int i = 0; i < comp.length; i++) {
            if (comp[i] instanceof JButton) {
                JButton btn = (JButton) comp[i];
                btn.setPreferredSize(new Dimension(200, 100));
                btn.setSize(new Dimension(200, 100));
                btn.setMinimumSize(new Dimension(200, 100));
            }
        }
        cbox.addItem("Quarter");
        cbox.addItem("Nickel");
        cbox.addItem("Penny");
        JPanel panel = new JPanel();
        panel.add(cbox);

        getContentPane().add(panel);

    }

    public static void main(String[] args) {
        ComboBoxFontChange frame = new ComboBoxFontChange();
        frame.setSize(300, 150);
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

2 个答案:

答案 0 :(得分:4)

下面:

JPanel panel = new JPanel();
panel.add(cbox);

默认情况下,JPanel有一个FlowLayout作为布局管理器,而且这个不符合组件的首选大小。它只是使用最小可能的尺寸来适应组件。正如@ alex2410在评论中所说,您需要使用适当的Layout manager来管理组件大小和位置。

另请参阅此主题:Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?

答案 1 :(得分:2)

看看这段代码。使用自定义ListCellRenderer我设置了可见单元格的首选大小。

您可以使用以下代码类CustomComboBox,只需更改getPreferredSize的{​​{1}}的维度。

然后为您的JLabel设置渲染器comboBox

comboBox.setRenderer(newCustomComboBox());

enter image description here

enter image description here

ListCellRenderer javadoc | JComboBox/ListCellRenderer tutorial