有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java更改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) 个答案

  1. # 1 楼答案

    看看这个代码。我使用自定义^{}设置可见单元格的首选大小

    您可以使用以下代码类CustomComboBox,只需更改JLabelgetPreferredSize的维度

    然后为comboBox设置渲染器comboBox.setRenderer(newCustomComboBox());

    import java.awt.BorderLayout;
    import java.awt.Component;
    import java.awt.Dimension;
    import javax.swing.JComboBox;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.ListCellRenderer;
    import javax.swing.SwingUtilities;
    
    public class ComboBoxDemo extends JFrame {
    
        JComboBox cbo = new JComboBox(new String[] {"Hello, StackOverflow"});
    
        public ComboBoxDemo(){
            cbo.setRenderer(new CustomComboBox());
            add(cbo, BorderLayout.SOUTH);
            add(new JLabel("Hello"), BorderLayout.CENTER);
    
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            pack();
            setVisible(true);
        }
    
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
                public void run(){
                    new ComboBoxDemo();
                }
            });
        }
    
        static class CustomComboBox extends JLabel implements ListCellRenderer {
    
            @Override
            public Component getListCellRendererComponent(
                    JList list, 
                    Object value, 
                    int index, 
                    boolean isSelected, 
                    boolean cellHasFocus) {
    
                JLabel label = new JLabel(){
                    public Dimension getPreferredSize(){
                        return new Dimension(200, 100);
                    }
                };
                label.setText(String.valueOf(value));
    
                return label;
            }
        }        
    }
    

    enter image description here

    enter image description here

    ListCellRenderer javadoc| JComboBox/ListCellRenderer tutorial