Java布局神器gridbagconstraints,让你的界面更美观!

吉云

今天来跟大家伙儿聊聊这个GridBagConstraints,这玩意儿真把我给整懵。

我就是想弄个简单的界面,把几个按钮、文本框啥的,按照我想要的样子给摆摆本来以为挺简单的,结果一上手就傻眼。之前用别的布局方式,像什么垂直布局,虽然看着是整齐,但是不够灵活,我想把一个按钮放中间,其他都靠边,这可咋整?

后来我就去网上搜找,发现有个叫GridBagLayout的布局管理器,据说特别灵活,想咋摆就咋摆。我一想,这不正是我想要的嘛于是我就兴冲冲地开始研究起来。

Java布局神器gridbagconstraints,让你的界面更美观!

可是,这GridBagLayout也太复杂!它不像其他的布局管理器那么直观,上来就直接设置组件位置。它还得配合一个叫GridBagConstraints的家伙一起用。这GridBagConstraints里面一堆参数,什么gridx、gridy、weightx、weighty、fill、anchor等等,看得我眼花缭乱,一个头两个大。

没办法,硬着头皮学呗!我先是创建一个JPanel,然后把它的布局管理器设置成GridBagLayout。对于每一个要添加的组件,我都得先创建一个GridBagConstraints对象,然后在这个对象里设置各种参数。

  • gridxgridy:这两个参数用来指定组件在网格中的位置,就像是坐标一样。
  • weightxweighty:这两个参数用来控制组件在水平和垂直方向上的权重。权重越大,组件占用的空间就越多。
  • fill:这个参数用来控制组件如何填充它的显示区域。比如说,我可以让一个按钮在水平方向上填满它的格子,或者让它只保持原来的大小。
  • Java布局神器gridbagconstraints,让你的界面更美观!

  • anchor:这个参数用来控制组件在它的显示区域内的对齐方式。比如说,我可以让一个组件居中显示,或者让它靠左、靠右、靠上、靠下等等。

设置好这些参数之后,我再用GridBagLayout的setConstraints方法把GridBagConstraints对象和组件关联起来,再把组件添加到JPanel里面。整个过程,那叫一个繁琐!

而且这GridBagLayout还有一个特点,就是它的单元网格是动态的。也就是说,每个格子的大小不是固定的,它会根据组件的大小和权重来自动调整。这就更增加它的复杂性,我得仔细地调整每个参数,才能让组件按照我预想的方式显示出来。

实践过程

我试着添加一个标签,设置它的gridx为0,gridy为0,weightx为0.5,weighty为0,fill为*。我希望这个标签能显示在第一行第一列,并且在水平方向上填满它的格子。结果,它确实显示在第一行第一列,但是它的大小并没有填满格子,而是保持原来的大小。这是因为我没有设置weightx和weighty,它们默认都是0,所以组件的大小不会随着容器的大小而改变。

Java布局神器gridbagconstraints,让你的界面更美观!

然后,我又试着添加一个按钮,设置它的gridx为1,gridy为0,weightx为0.5,weighty为0,fill为*,anchor为*。我希望这个按钮能显示在第一行第二列,并且保持原来的大小,居中显示。结果,它确实按照我的预期显示出来。这是因为我设置weightx为0.5,所以它和第一个标签各占一半的空间,而且我设置anchor为CENTER,所以它在格子中居中显示。

就这样,我不断地尝试、调整,终于慢慢摸清GridBagLayout和GridBagConstraints的用法。虽然过程很痛苦,但是当我最终把界面按照我想要的样子摆放好的时候,还是很有成就感的。

GridBagConstraints这玩意儿确实很强大,也很灵活,但是它的复杂性也是真的高。如果你只是想做一个简单的界面,那还是用其他的布局管理器。但是,如果你想做一个复杂的、高度定制化的界面,那就来挑战一下GridBagConstraints,相信你一定会有所收获的!虽然过程痛苦,但是实现的效果还是非常不错的。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]