java窗体都有那些布局?,特点各是什么?

 我来答
厍振荣0B
2009-02-01 · TA获得超过954个赞
知道小有建树答主
回答量:1250
采纳率:0%
帮助的人:569万
展开全部
GridLayout(网格布局),FlowLayout(顺序布局).BorderLayout(东南西北中布局).基本上就是这几种,还有一些是在这些的基础上扩展的.有一个GridBagLayout,这个布局很复杂,但是也很完美,几乎你想要的布局它都能完成.
百度网友20474cf
推荐于2016-04-16 · TA获得超过1095个赞
知道小有建树答主
回答量:1424
采纳率:0%
帮助的人:727万
展开全部
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

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);
}
}
程序运行效果

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,则只有最后加上的那个是可见的。

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);
}
}
程序运行效果

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

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

GridBag Layout Manager(网格包布局管理器)

GridBag布局管理器可以比较精确地控制Container中component的位置和大小,但它非常复杂,不太实用,这里就不作介绍了。

资料来源:http://courseware.ecnudec.com/zsb/zjs/
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式