Re: [问题] GridBagLayout 排版无法运行

楼主: darkk6 (Mr. Pan)   2016-07-18 02:22:45
※ 引述《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
作者: crazwade (crazwade)   2016-07-18 09:38:00
很详细
作者: gameking (GK草祭)   2016-07-18 15:04:00
详细有耐心 给推
作者: laiDark (煎饺加赖)   2016-07-18 18:52:00
推QQ 谢谢这么有耐心的写文 问题已解决

Links booklink

Contact Us: admin [ a t ] ucptt.com