Java swing 使用 BoxLayout + 尺寸约束

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值