Java开发GUI之GridBagLayout布局

Java开发GUI之GridBagLayout布局

    GridBagLayout布局管理器是比GridLayout布局更加强大的表格布局。GridLayout进行的表格布局其中元素尺寸相同,而GridBagLayout则可以灵活配置其中元素的尺寸和位置。同样,GridBagLayout的使用也更加复杂,其布局依赖GridBagConstraints类。

    先看如下经典示例:

	static void GridBagLayoutTest(){
		Frame frame = new Frame("GridBag");
		GridBagLayout layout = new GridBagLayout();
		GridBagConstraints constraints = new GridBagConstraints();
		Panel pannel = new Panel(layout);
		constraints.fill = GridBagConstraints.BOTH;
		constraints.weightx = 1.0;
		Button button1 = new Button("Button1");
		layout.setConstraints(button1, constraints);
		pannel.add(button1);
		Button button2 = new Button("Button2");
		layout.setConstraints(button2, constraints);
		pannel.add(button2);
		Button button3 = new Button("Button3");
		layout.setConstraints(button3, constraints);
		pannel.add(button3);
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		Button button4 = new Button("Button4");
		layout.setConstraints(button4, constraints);
		pannel.add(button4);
		constraints.weightx=0;
		Button button5 = new Button("Button5");
		layout.setConstraints(button5, constraints);
		pannel.add(button5);
		constraints.gridwidth = GridBagConstraints.RELATIVE;
		Button button6 = new Button("Button6");
		layout.setConstraints(button6, constraints);
		pannel.add(button6);
		constraints.gridwidth = GridBagConstraints.REMAINDER;
		Button button7 = new Button("Button7");
		layout.setConstraints(button7, constraints);
		pannel.add(button7);
		constraints.gridwidth=1;
		constraints.gridheight=2;
		constraints.weighty=1.0;
		Button button8 = new Button("Button8");
		layout.setConstraints(button8, constraints);
		pannel.add(button8);
		constraints.weighty=0;
		constraints.gridwidth=GridBagConstraints.REMAINDER;
		constraints.gridheight = 1;
		Button button9 = new Button("Button9");
		layout.setConstraints(button9, constraints);
		pannel.add(button9);
		Button button10 = new Button("Button10");
		layout.setConstraints(button10, constraints);
		pannel.add(button10);
		frame.add(pannel);
		frame.pack();
		frame.show();
	}

上面代码布局了10个按钮,其中复用了同一个GridBagConstraints对象,效果如下:

GridBagLayout类中常用方法列举如下:

//构造方法
public GridBagLayout ();
//设置组件的布局
public void setConstraints(Component comp, GridBagConstraints constraints);
//获取某个组件的布局对象
public GridBagConstraints getConstraints(Component comp);
//获取布局原点
public Point getLayoutOrigin ();

在GridBagLayout中其着至关重要作用的类是GridBagConstraints布局类,其精确确定每个子组件的位置和尺寸信息。下面我们来一点点介绍这个类中属性的意义:

fill:这个属性确定当被布局组件尺寸小于其被指定的表格尺寸时,组件的拉伸模式,可选值定义在GridBagConstraints类中,如下:

//不进行尺寸处理 默认居中
public static final int NONE = 0;
//水平和竖直均拉伸到充满
public static final int BOTH = 1;
//水平方向拉伸充满
public static final int HORIZONTAL = 2;
//竖直方向拉伸充满
public static final int VERTICAL = 3;

anchor:这个属性确定当被布局组件尺寸小于其被指定的表格尺寸时,组件的布局位置,可选值如下:

//居中
public static final int CENTER = 10;
//布局在上方
public static final int NORTH = 11;
//布局在右上方
public static final int NORTHEAST = 12;
//布局在右方
public static final int EAST = 13;
//布局在右下方
public static final int SOUTHEAST = 14;
//布局在下方
public static final int SOUTH = 15;
//布局在左下方
public static final int SOUTHWEST = 16;
//布局在左方
public static final int WEST = 17;
//布局在左上方
public static final int NORTHWEST = 18;

gridwidth与gridheight:这两个属性分别设置组件的宽度与高度,他们可以设置为固定的数值,也可以设置为下面几个特殊的值来表示特殊的意义:

//占据其他组件布局后余下的尺寸
public static final int RELATIVE = -1;
//暂居此行或者此列的剩下全部,后置的组件另起一行或一列
public static final int REMAINDER = 0;

gridx与gridy:这两个值设置组件布局左上角所在的单元格,单位为单元格,默认会排列在上一个单元格之后。

weightx与weighty:这两个值设置组件布局的水平权重和竖直权重。

insets:设置组件边距。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android常用基础

自定义View(九)-View的工作原理- View的layout()和draw()

上一节我们将View的测量流程理的差不多了,这篇我们来看下View的剩下的2大流程layout(布局)和draw(绘制)。相对测量来说,布局与绘制就简单了许多,...

13320
来自专栏Sorrower的专栏

界面无小事(五):自定义TextView

11730
来自专栏程序员互动联盟

css样式大全

字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX、PD...

60140
来自专栏Android开发指南

15.瀑布流、测量

30570
来自专栏Android常用基础

自定义View(八)-View的工作原理- View的measure

从上一篇中。同Activity的布局加载了解了整个View树加载的流程。最后是通过View的三大流程来实现布局的显示的。那么我们这篇来讲下布局的三大流程之一--...

17310
来自专栏一“技”之长

Java开发GUI之GridLayout网格布局

    GridLayout是简单的网格布局,使用其可以方便的实现多行多列的布局样式。

8230
来自专栏Hellovass 的博客

手动测量 View 的宽高

手动调用 View 的 measure(int widthMeasureSpec,int heightMeasureSpec) 方法来得到 View 的宽高。

23360
来自专栏移动开发

ZoomLoadView 自定义view 可以做app的启动首页效果

虽然这个控件类似的功能github上也有,但还是自己实现了下. 这个控件可以保持图片的比例去填充view,如果按图片比例计算出的大小超出view的大小,会展...

9610
来自专栏项勇

笔记51 | Android自定义View(二)

20060
来自专栏前端小叙

js焦点轮播图

汇集网上焦点轮播图的实现方式,自己试了下,不过鼠标悬浮停止动画和鼠标离开动画播放好像没生效,不太明白,最后两行代码中,为什么可以直接写stop和play。不用加...

768130

扫码关注云+社区

领取腾讯云代金券