GUI ------ 布局控制器(Layout)

布局控制器,是用来系统自动分配各个component在window内部是怎么排布的;默认为FlowLayout,即挨个排序。FlowLayout是Panel的

instance 1:FlowLayout

import java.awt.*;

public class TestLayout {
	public static void main(String[] args) {
		Frame f = new Frame();
		Button b1 = new Button("ok");
		Button b2 = new Button("open");
		Button b3 = new Button("change");
		f.setBackground(Color.BLUE);
		f.setBounds(100, 100, 300, 300);
		f.setLayout(new FlowLayout());
		f.setResizable(true);
		f.add(b1);
		f.add(b2);
		f.add(b3);
		f.setVisible(true);
	}

}

instance 2:BorderLayout

import java.awt.*;

public class TestBorderLayout {
	public static void main(String[] args) {
		Frame f = new Frame("Border Layout");
		Button bn = new Button("Bn");
		Button bs = new Button("Bs");
		Button be = new Button("Be");
		Button bw = new Button("Bw");
		Button bc = new Button("Bc");
	
//		f.add(bw,"West");
//		f.add(be,"East");
//		f.add(bn,"North");
//		f.add(bs,"South");
//		f.add(bc,"Center");
//		f.setLayout(new BordorLayout());
		f.add(bn,BorderLayout.NORTH);
		f.add(bs,BorderLayout.SOUTH);
		f.add(bw,BorderLayout.WEST);
		f.add(be,BorderLayout.EAST);
		f.add(bc,BorderLayout.CENTER);
		
		f.setSize(200, 200);
		f.setVisible(true);
	}

}

BorderLayout把整个界面划分为东西南北中五个区域块;其中BorderLayout.NORTH等是int类型的数据,为一个常量。

instance 3:GridLayout

import java.awt.*;

public class TestGridLayout {
	public static void main(String[] args) {
		Frame f = new Frame();
		Button b1 = new Button("b1");
		Button b2 = new Button("b2");
		Button b3 = new Button("b3");
		Button b4 = new Button("b4");
		Button b5 = new Button("b5");
		Button b6 = new Button("b6");
		f.setLayout(new GridLayout(3,2));
		
		f.add(b1);
		f.add(b2);
		f.add(b3);
		f.add(b4);
		f.add(b5);
		f.add(b6);
		f.pack();
		f.setSize(200, 200);
		f.setVisible(true);
	}

}

注:当调用Layout后,其内部的component的大小和位置由系统(布局管理器自主分配),而无法认为的设计。而pack()方法是用来显示各个组件的。

instance 4:综合实例

import java.awt.*;

public class TestedLayout {
	public static void main(String[] args) {
		Frame f = new Frame("GUI");
		f.setLayout(new GridLayout(2,1));
		Panel p1 = new Panel(new BorderLayout());
		Panel p2 = new Panel(new BorderLayout());
		Panel p11 = new Panel(new GridLayout(2,1));
		Panel p22 = new Panel(new GridLayout(2,2));
		Button b1 = new Button("button");
		Button b2 = new Button("button");
		Button b3 = new Button("button");
		Button b4 = new Button("button");
		Button b5 = new Button("button");
		Button b6 = new Button("button");
		Button b7 = new Button("button");
		Button b8 = new Button("button");
		Button b9 = new Button("button");
		Button b10 = new Button("button");
		p1.add(b1,BorderLayout.WEST);
		p1.add(b2,BorderLayout.EAST);
		p2.add(b3,BorderLayout.WEST);
		p2.add(b4,BorderLayout.EAST);
		p11.add(b5);
		p11.add(b6);
		p22.add(b7);
		p22.add(b8);
		p22.add(b9);
		p22.add(b10);
		p1.add(p11,BorderLayout.CENTER);
		p2.add(p22,BorderLayout.CENTER);
		f.add(p1);
		f.add(p2);
		f.setBounds(100, 100, 400, 400);
		f.setVisible(true);
		
	}

}

注:一个new等于创建了一个button对象,分配了一个内存空间。即使是完全相同的button即同样的大小名称等,其终究还是哪一个,当其被反复添加时,仅仅是相当于给其换了位置。其和变量不同,并不是单纯的复制,而是内存和对象的指向问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值