java swing/javafx的布局神器MigLayout的使用

java swing自带的布局很难用,好在有个第三方布局库MigLayout,不过MigLayout对于新手来说很难用,因为找不到教程案例,也找不到参数说明,看着都是硬编码的参数,实际上弄懂了之后就觉得很强大,我们只需要学会其中的两种写法,基本上布局都能胜任了

先了解以下MigLayout的构造方法,一种是可以无参的,还有一种是带参,通常使用带参的就行,
第一个参数是针对整个JPanel而言的,第二个参数是针对行(水平),第三个针对列(垂直),
多个参数通过,分隔,下面讲解参数,

  • debug, insets 25
    其中debug表示开启调试,可以看到每个组件在每个单元格的box边框,方便调试布局,insets 25表示JPanel的上下左右间距25
  • [grow]
    表示水平方向展开到最大,我推荐展开
  • “”
    第三参数是针对列的,空表示不设置,当然也可以不填
JPanel jPanel = new JPanel(new MigLayout("debug, insets 25", "[grow]", ""));

继续往下按代码

jPanel.add(new JButton("按钮1"), "wrap,align right,span");

这里添加一个按钮1,相对应的参数wrap,align right,span

  • wrap
    表示在新增按钮1后进行换行
  • align right
    表示在整个组件中靠右对齐
  • span
    表示占满剩余的所有格子,使得变成整个一行就一格,所以会靠到JPanel的最右边,如果不加,在一行上存在多个单元格的时候,只会靠到当前单元格的右边

继续往下

jPanel.add(new JButton("测试2"),"w 50!, ");
  • w 50!
    表示设置宽度为50,同理h 50!,设置高度,也可以写成w 50%,通过百分比来设置宽高
		//split合并单元的,再span扩展
		jPanel.add(new JButton("按钮3"), "align right,split,span"); 
		jPanel.add(new JButton("按钮3"), "gapleft 30");
		jPanel.add(new JButton("按钮3"), "wrap");
  • align right,split,span
    当然行上存在多个列,会导致无法将一组按钮统一靠右对齐,那就可以通过split合并单元格,再通过span扩展
  • gapleft 30
    表示向左空开30

以上介绍的是Miglayout中基本的表格布局,下面再讲解一下强大的绝对定位布局

		jPanel.add(new JButton("按钮5"), "id btn, pos 0.5al 0.5al, w 100!, h 100!");
		jPanel.add(new JButton("按钮6"), "pos btn.x2 btn.y2");
		//也可以这样写,pos null null btn.x btn.y
		jPanel.add(new JButton("按钮7"), "pos btn.x-pref btn.y-pref"); 
		jPanel.add(new JButton("按钮4"), "pos 1.0al 1.0al");
  • id btn, pos 0.5al 0.5al, w 100!, h 100!
    这里可以设置一个组件的id为btn,pos 0.5al 0.5al表示在jPanel的中间,[pos 水平 垂直]的用法,范围是0-1表示最左-最右或最上到最下,例如pos 0al 0.5al表示水平靠左,垂直居中

  • pos btn.x2 btn.y2
    表示相对于刚刚的btn坐标设置位置,btn.x,btn.y,btn.x2,btn.y2表示左上角和右下角的点位

  • pos btn.x-pref btn.y-pref
    btn.x-pref表示左上角的点位再减去当前组件的pref宽度,不然和按钮6就重叠了

当然在这里还可以pos btn.x2+100 btn.y2+50,这样进行偏移计算

完整代码

		JFrame frame = new JFrame("测试Miglayout");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(800, 600);
		
		JPanel jPanel = new JPanel(new MigLayout("debug, insets 25", "[grow]", ""));
		jPanel.add(new JButton("按钮1"), "wrap,align right,span");
		jPanel.add(new JButton("测试2"),"w 50!, ");
		jPanel.add(new JButton("按钮2"), "align left, span");
		jPanel.add(new JButton("按钮2"), "align left, span, wrap");
		
		jPanel.add(new JButton("按钮3"), "align right,split,span"); //split合并单元的,再span扩展
		jPanel.add(new JButton("按钮3"), "gapleft 30");
		jPanel.add(new JButton("按钮3"), "wrap");
		
		jPanel.add(new JButton("按钮5"), "id btn, pos 0.5al 0.5al, w 100!, h 100!");
		jPanel.add(new JButton("按钮6"), "pos btn.x2 btn.y2");
		jPanel.add(new JButton("按钮7"), "pos btn.x-pref btn.y-pref"); //pos null null btn.x btn.y
		
		
		jPanel.add(new JButton("按钮4"), "pos 1.0al 1.0al");
		
		
		frame.add(jPanel);
		
		frame.setLocationRelativeTo(null);
		frame.setVisible(true);

案例展示
请添加图片描述
当然MigLayout还有很多用法,不过目前这几项足够胜任大多数布局了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值