swing窗体布局基础

Container中的component,通常是由布局管理器 (layout manager)来管理的。每个Container(如:Panel和Frame)均有一个缺省的布局管理器,用户也可通过setLayout()方法指定其他的布局管理器。
布局管理器负责决定Container内所有组件的位置和大小。

一、Java中包含了下列布局管理器:

         Flow Layout - 是Panel和Applet缺省的布局管理器
         Border Layout - 是Window和Dialog缺省的布局管理器,即也是Frame缺省的布局管理器。
         Grid Layout 
         Card Layout 
         GridBag Layout

   1、Flow Layout Manager(顺序布局管理器)

         该布局管理器对应的类为java.awt.FlowLayout。以下是一个使用Flow Layout的例子。
import java.awt.*;
public class ExGui {
private Frame f;
private Button b1;
private Button b2;
public static void main(String args[]) {
ExGui guiWindow = new ExGui();
guiWindow.go();
}
public void go() {

//create a instance of the class java.awt.Frame
f = new Frame("GUI example");

//create a instance of flow layout manager
//and install it in the Frame
f.setLayout(new FlowLayout());

// create a instance of class java.awt.Button
b1= new Button("Press Me");

//the button label is defined by the String argument
//to the constructor
b2 = new Button("Don't Press Me");

//add component b1 to Container f
f.add(b1);
f.add(b2);

//强制告诉Frame对象,对它的component再排版,
//以尽量小的空间存放这些component
f.pack();

f.setVisible(true);
}
}
程序运行效果

 

總結:

         该例所使用的flow layout是按行来放置component的,每当一行放满后,就新产生一行开始放。
与其他布局管理器不同,flow layout管理器不对其component的大小加以限制,允许component保持其自然的尺寸,即"要多大有多大"。

         Flow Layout的component的排列一般是从左到右,从上到下,类似段落中的文字行。Flow Layout通常用于安排panel中的Button和其他component。用户可通过给Flow Layout的构造方法不同的参数来调整component的位置和间距。
FlowLayout类有三种构造方法,最复杂的有三个参数,格式如下:

FlowLayout(int align,int hgap,int vgap);
其中,align决定component的位置,其值有FlowLayout.LEFT, FlowLayout.CENTER, FlowLayout.RIGHT三种,缺省为FlowLayout.CENTER。 hgap和vgap分别对应水平和垂直方向的间距,缺省为5单位(unit)。

而最常用最简单的是不带参数的构造方法:
FlowLayout();

下列程序使用FlowLayout布局管理器将几个Button加到Frame中。
import java.awt.*;
public class MyFlow {
private Frame f;
private Button button1,button2,button3;
public static void main(String args[]) {
MyFlow mflow = new MyFlow();
mflow.go();
}
public void go() {
f = new Frame("Flow Layout");
f.setLayout(new FlowLayout());
button1 = new Button("Ok");
button2 = new Button("Open");
button3 = new Button("Close");
f.add(button1);
f.add(button2);
f.add(button3);
f.setSize(100,100);
f.setVisible(true);
}
}
程序运行效果

 

   2、Border Layout Manager(边界布局管理器)

         该布局管理器对应的类为java.awt.BorderLayout。Border Layout manager提供了在Panel或Window中放置component的更复杂的方法。它包括五个区:北区(North)、南区(South)、东区(East)、西区(West)和中区(Center)。这几个区在Panel上的分布规律是"上北下南,左西右东"。

一旦东南西北四个区被填充后,剩下的空间都留给中区。当窗口水平扩展时,北、南、中三区得到扩展,垂直扩展时,东、西、中三区得到扩展。
Border布局管理器是Dialog和Frame的缺省布局管理器。

例:
import java.awt.*;
public class ExGui2 {
private Frame f;
private Button bn,bs,bw,be,bc;
public static void main(String args[]) {
ExGui2 guiWindow2 = new ExGui2();
guiWindow2.go();
}
public void go() {
f = new Frame("Border Layout");
bn = new Button("B1");
bs = new Button("B2");
be = new Button("B3");
bw = new Button("B4");
bc = new Button("B5");
f.add(bn,BorderLayout.NORTH);
f.add(bs,BorderLayout.SOUTH);
f.add(be,BorderLayout.EAST);
f.add(bw,BorderLayout.WEST);
f.add(bc,BorderLayout.CENTER);
f.setSize(200,200);
f.setVisible(true);
}
}
程序运行效果

 

總結:

         同样,使用BorderLayout的构造方法,可设置其component的间距。如:
BorderLayout(); //component间没有间距

BorderLayout(int hgap,int vgap); // hgap和vgap分别对应水平和垂直方向的间距。

对应Border布局管理器的五个区域,一般每个区域只能有一个component, 若在一个区域中加上多个component,则只有最后加上的那个是可见的。

  

   3、Grid Layout Manager(网格布局管理器)

         该布局管理器对应的类为java.awt.GridLayout。Grid布局管理器提供了放置component的灵活手段。程序员可以建立一个有多行和多列的布局管理器,然后component就可以按一定的次序(从左到右,从上到下)进行排列。

当Grid布局管理器对应的窗口发生变化时,内部component的相对位置并不变化,只有大小发生变化。
Grid布局管理器总是忽略component倾向的大小(prefered size),它把每个component的大小设置成相同的。

GridLayout类有三个构造方法:
GridLayout()
//缺省建立一行的布局,每个component占居一列

GridLayout(int rows, int cols)
//建立指定行和列的布局,rows和cols对应行数和列数

GridLayout(int rows, int cols, int hgap, int vgap)
//建立指定行列数和间距的布局,hgap和vgap分别对应水平和垂直间距。

例:
import java.awt.*;
public class GridEx {
private Frame f;
private Button b1,b2,b3,b4,b5,b6;
public static void main(String args[]) {
GridEx grid = new GridEx();
grid.go();
}
public void go() {
f = new Frame("Grid example");
f.setLayout(new GridLayout(3,2));
b1 = new Button("1");
b2 = new Button("2");
b3 = new Button("3");
b4 = new Button("4");
b5 = new Button("5");
b6 = new Button("6");
f.add(b1);
f.add(b2);
f.add(b3);
f.add(b4);
f.add(b5);
f.add(b6);
f.pack();
f.setVisible(true);
}
}
程序运行效果


    4、Card Layout Manager(卡片布局管理器)

         Card布局管理器把用户接口看成是一系列的卡片,某一时刻只有一张是可见的。可以使用add()方法把卡片加到Card Layout中,然后使用CardLayout类中的first()、next()等方法根据需要切换到新的卡片。有兴趣的同学可自己查看参考书。

 

 

常用的也就這4種,其他的不怎麼實用、、、

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值