当前位置: 首页> 汽车> 车展 > java swing/javafx的布局神器MigLayout的使用

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

时间:2025/9/7 20:03:01来源:https://blog.csdn.net/Janix520/article/details/141784386 浏览次数: 1次

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!,设置高度
		//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.yjPanel.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.yjPanel.add(new JButton("按钮4"), "pos 1.0al 1.0al");frame.add(jPanel);frame.setLocationRelativeTo(null);frame.setVisible(true);

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

关键字:java swing/javafx的布局神器MigLayout的使用

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: