有 Java 编程相关的问题?

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

java JPanel在使用BoxLayout时不会调整大小

我有一个JPanel并设置如下:

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

然后我添加一个JTextField,它占据了整个面板:

JTextField field = new JTextField();
panel.add(field);

但是,当我尝试调整其大小时:

panel.setPreferredSize(new Dimension(20,400));

什么都没发生。为什么?我使用BoxLayout来按垂直顺序排列我的JLabelJTextField组件。如果无法调整面板的大小,我能否至少调整JTextField的大小,使其不占用整个空间

例如:

import java.awt.Dimension;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class GUI extends JFrame 
{
    public GUI() {
        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
        panel.setPreferredSize(new Dimension(20,400));
        JTextField field1 = new JTextField();
        JTextField field2 = new JTextField();
        panel.add(field1);
        panel.add(field2);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    can I at least resize the JTextField so it does not take up the entire space?

    BoxLayout将调整组件的大小,以填充面板中的空间,使其达到组件的最大尺寸。文本字段没有最大大小

    通过控制最大大小,可以防止文本字段增长:

    panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
    JTextField textField = new JTextField(10);
    textField.setMaximumSize( textField.getPreferredSize() );
    panel.add( textField );