作者darkk6 (Mr. Pan)
看板java
标题Re: [问题] GridBagLayout 排版无法运行
时间Mon Jul 18 02:22:45 2016
※ 引述《laiDark (煎饺加赖)》之铭言:
: 我一直以来很想使用 GridBagLayout 这个方式排版
GridBagLayout 基本上只要会设定,他可以做到任何你要的排版
但缺点就是非常复杂
: code
: http://pastie.org/10909674
: main_code
: http://pastie.org/10909675
: 不管我怎麽修改 load 按钮仍处於中央
: http://imgur.com/FNk2VpO
PS : 底下一些用语和说明大概都是以我自己的理解来讲的,如果有误麻烦指正XD
你的 Code 有几个问题,但我这边先讲为何都一直在中间。
最主要的问题就在你的 weightx 和 weighty 设定
以你的图片来说,这个按钮的 Bag 范围如下:
http://i.imgur.com/hCmzsD8.png
因为你指定 wieghtx 是 0 , 代表不需要任何额外的空间比重,
所以这个范围就会刚好是按钮的大小,而整个 JFrame 只有一个
元件的情况下,就会在中间了
如果要能呈现按钮在最左边(你的 code 写 WEST 嘛),至少在 weightx
的地方要给数值(至少不能是 0 )
也就是把 c0.weightx = 0 改成如 c0.weightx = 1.0
这样的话这个 bag 的范围就会变成这样
http://i.imgur.com/0J5LEZ9.png
在这个情况下,你使用 fill 或者 anchor 才能达成你要的结果。
接着可以参考一下这个图来帮助理解:
PS : 这边将 fill 设定成 BOTH , 也就是 c0.fill=GridBagConstraints.BOTH
http://i.imgur.com/1rATsLJ.png
以上先解决你的问题
===================================================
接着说明一下 GridBagConstraints 一些常用的属性意义
fill ==> 填满方式,这个元件要填满的方式,有不填满、垂直、水平、都填满
anchor ==> 所在位置,元件在 bag 中的位置, 8 方位 + 中间共九种
gridx , gridy ==> 这个 bag 要放在哪个 row,column (x,y 座标)
gridwidth , gridheight ==> 这个 bag 在 x 和 y 占用了几格
( 有点类似 html 的 colspan 和 rowspan )
weightx , weighty ==> 上面说过了
在使用 GridBagLayout 制作 UI 时,建议先用纸笔把配置画出来,然後用最少的线条
去做切割,注意,线条只能是横线和直线,而且要切到底,比如:
http://i.imgur.com/v4DtZ04.png
切开之後从左上角开始编 x , y 的号码,就如上图所写 ( ) 中的数值
而这个 x , y 就是 gridx 和 gridy,也就是例如:按钮 B 的 gridx=1 , gridy=0
接着看图说故事:
http://imgur.com/a/6Ry5d
假设现在想设计一个视窗按钮如上半部的图呈现
那麽我们就先画线把元件切开,这边切成六块,并给予编号 (参考下半部的图)
按钮 C D E 比较好解释,因此先从 CDE 开始列出
按钮编号 gridx gridy gridwidth grideheight
-------------------------------------------------------------
C 0 1 1 1
D 1 1 1 1
E 2 1 1 1
注意按钮 A 和 B,由於这两个按钮我没有要填满,也只要置中,所以才可以这样切割
这样切好之後,我们可以看到 按钮A 是从 (0,0) 的地方开始,横跨 1 格
横的是 width,因此 gridwidth 是 2 ( 横跨1格 => 占用两格 , colspan=2 )
而按钮 B 则是从 (1,0) 开始,也是横跨一格:
按钮编号 gridx gridy gridwidth grideheight
-------------------------------------------------------------
A 0 0 2 1
B 1 0 2 1
这样就可达成这个 layout:
http://i.imgur.com/TXfAllA.png
其实还有很多要注意的地方,不过先了解 gridx , gridy , gridwidth , gridheight
还有 weightx , weighty 各自的意义会比较容易理解。
其他的讲解就比较复杂,有兴趣可以提供 UI 设计图,然後我再简单介绍看看
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.139.188.199
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1468779767.A.404.html
※ 编辑: darkk6 (223.139.188.199), 07/18/2016 02:29:33
1F:推 crazwade: 很详细 07/18 09:38
2F:推 gameking: 详细有耐心 给推 07/18 15:04
3F:推 laiDark: 推QQ 谢谢这麽有耐心的写文 问题已解决 07/18 18:52
4F:推 psp800320: 超详细 01/09 21:58