JPanel panel1 = new JPanel();
panel1.setLayout(new BoxLayout(panel1, BoxLayout.X_AXIS));
jf = new JTextField("单行文本输入");
jf.setMaximumSize(new Dimension(Integer.MAX_VALUE, jf.getPreferredSize().height)); // 宽度自适应
b1 = new JButton("点击");
b1.setMaximumSize(new Dimension(b1.getPreferredSize().width * 2, b1.getPreferredSize().height)); // 固定按钮宽度
建议
- BoxLayout:像一条传送带,组件会按照添加顺序水平排列(
X_AXIS
)或垂直排列(Y_AXIS
)。 - 好处:简单直观,适合线性排列的组件(如按钮组、表单行)。
- JTextField:单行文本输入框,默认会根据内容调整宽度。
- setMaximumSize:
Integer.MAX_VALUE
:让文本框尽可能宽(填满可用空间)。jf.getPreferredSize().height
:保持文本框的默认高度(避免变形)。
- 效果:文本框会水平拉伸,但高度不变。
- JButton:按钮组件,默认会根据文本内容调整大小。
- setMaximumSize:
b1.getPreferredSize().width * 2
:按钮宽度固定为默认宽度的 2 倍(不会随窗口拉伸)。b1.getPreferredSize().height
:保持按钮的默认高度。
- 效果:按钮宽度固定,不会被拉伸。
-
通俗解释
- BoxLayout:就像排队买奶茶,组件一个接一个横着排(水平布局)。
- setMaximumSize:
- 文本框:"我要尽可能宽,把空位都占了!"
- 按钮:"我只要这么大,别把我挤变形!"
- 如果想让组件之间有间距,可以在添加组件时使用
panel.add(Box.createHorizontalStrut(10));
。 import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.*;
public class TestD {
public static void main(String[] args) {
// TODO Auto-generated method stub
JFrame jf = new JFrame();
jf.setTitle("测试组件大小");
jf.setBounds(200, 200, 500, 500);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setLayout(new BorderLayout());
JPanel panel1 = new JPanel();
JTextArea jt = new JTextArea();
JScrollPane js = new JScrollPane(jt);
JPanel panel2 = new JPanel();
panel2.setLayout(new BoxLayout(panel2, BoxLayout.X_AXIS));
JTextField jtf = new JTextField();
JButton b1 = new JButton("按钮");
jtf.setMaximumSize(new Dimension(Integer.MAX_VALUE, jtf.getPreferredSize().height));
b1.setMaximumSize(new Dimension(b1.getPreferredSize().width*2, b1.getPreferredSize().height));
panel2.add(jtf);
panel2.add(b1);
jf.add(js,BorderLayout.CENTER);
jf.add(panel2,BorderLayout.SOUTH);
jf.setVisible(true);
}
}