JavaSE学习55:GUI编程之布局管理器
Posted life is wonderful
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaSE学习55:GUI编程之布局管理器相关的知识,希望对你有一定的参考价值。
一布局管理器概述
Java语言中,提供了布局管理器类的对象可以管理。
管理Component对象在Container对象中的布局,不必直接设置Component对象位置和大小。每个Container对象
都有一个布局管理器对象,当容器需要对某个组件进行特定或判断其大小尺寸时,就会调用其对应的布局管理器,调
用Container对象的setLayout()方法改变其布局管理器对象。
AWT提供了5种布局管理器,分别为:
FlowLayout布局管理器
BorderLayout布局管理器
GridLayout布局管理器CardLayout布局管理器
GridBagLayout布局管理器
最常用的是前三个布局管理器,那么我就详细介绍这三个布局管理器。
二FlowLayout布局管理器
FlowLayout是Panel类的默认布局管理器。FlowLayout布局管理器对组件逐行定位,行内从左到右,一行排满后
换行。不改变组件的大小,按组件原有尺寸显示组件,可设置不同的组件间距,行距以及对齐方式。
FlowLayout布局管理器默认的对齐方式是居中。
流布局用于安排有向流中的组件,这非常类似于段落中的文本行。流的方向取决于容器的componentOrientation
属性,它可能是以下两个值中的一个: ComponentOrientation.LEFT_TO_RIGHT 和
ComponentOrientation.RIGHT_TO_LEFT 。
流布局一般用来安排面板中的按钮。它使得按钮呈水平放置,直到同一条线上再也没有适合的按钮。线的对齐方
式由align属性确定。可能的值为: LEFT、RIGHT、CENTER、LEADING、TRAILING。
FlowLayout类的字段:
FlowLayout类的构造方法:
我们可以列举出一些例子:
FlowLayout类的方法:
实例代码:
TestFlowLayout.java源代码:
import java.awt.*;
/* 范例名称:FlowLayout用法举例
* 源文件名称:TestFlowLayout.java
* 要 点:
* 1. 布局管理器的概念和作用
* 2. FlowLayout的性质及用法
*/
public class TestFlowLayout{
public static void main(String args[]){
Frame f = new Frame("Flow Layout");
Button button1 = new Button("Ok");
Button button2 = new Button("Open");
Button button3 = new Button("Close");
f.setLayout(new FlowLayout(FlowLayout.LEFT));
f.add(button1);
f.add(button2);
f.add(button3);
f.setSize(100,100);
f.setVisible(true);
}
}
运行结果:
TestFlowLayout2.java源代码:
import java.awt.*;
public class TestFlowLayout2{
public static void main(String args[]) {
Frame f = new Frame("Java窗体");
FlowLayout l = new FlowLayout(FlowLayout.CENTER, 20, 40);
f.setLayout(l);
f.setLocation(300,400);
f.setSize(300,200);
f.setBackground(new Color(204,204,255));
for(int i = 1; i<=7; i++){
f.add(new Button("BUTTON"));
}
f.setVisible(true);
}
}
运行结果:
三Borderlayout布局管理器
Borderlayout布局管理器是Frame类的默认布局管理器。
Borderlayout布局管理器将整个容器的布局分成东(EAST)、西(WEST)、南(SOUTH)、北(NORTH)、中
(CENTER)五个区域,组件只能被添加到指定的区域。如不指定组件的加入部位,则默认加入到CENTER区。每个区
域只能加入一个组件,如加入多个,则先前加入的会被覆盖。
这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、
东、西、中。每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST、
CENTER。当使用边框布局将一个组件添加到容器中时,要使用这五个常量之一,例如:
Panel p = new Panel();
p.setLayout(new BorderLayout());
p.add(new Button("Okay"), BorderLayout.SOUTH);
为了方便起见,BorderLayout 将缺少字符串说明的情况解释为常量CENTER:
Panel p2 = new Panel();
p2.setLayout(new BorderLayout());
p2.add(new TextArea()); // Same as p.add(new TextArea(), BorderLayout.CENTER);
BorderLayout布局管理器尺寸缩放原则:
1)北、南两个区域在水平方向缩放;
2)东、西两个区域在垂直方法缩放;
3)中部区域在两个方向上缩放。
根据其首选大小和容器大小的约束(constraints)对组件进行布局。NORTH和SOUTH组件可以在水平方向上伸;
而EAST和WEST组件可以在垂直方向上拉伸;CENTER组件可同时在水平和垂直方向上拉伸,从而填充所有剩余空
间。
BorderLayout类的字段:
BorderLayout类的构造方法:
BorderLayout类的方法:
实例代码:
import java.awt.*;
/* 范例名称:BorderLayout应用举例
* 源文件名称:TestBorderLayout.java
* 要 点:BorderLayout布局管理器的性质及用法
*/
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 bw = new Button("BW");
Button be = new Button("BE");
Button bc = new Button("BC");
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.add(bn, "North");
f.add(bs, "South");
f.add(bw, "West");
f.add(be, "East");
f.add(bc, "Center");
*/
f.setSize(400,300);
f.setVisible(true);
}
}
运行结果:
四GridLayout布局管理器
GridLayout 类是一个布局处理器,它以矩形网格形式对容器的组件进行布置。容器被分成大小相等的矩形,一个
矩形中放置一个组件。
GridLayout布局管理器将空间分成规则的矩形网格,每个单元格区域大小相等。组件被添加到每个单元格中,先
从左到右添满一行后换行,再从上到下。在GridLayout构造方法中指定分割的行数和列数如:GridLayout(3,4)。
GridLayout类的构造方法:
GridLayout类的方法:
实例代码:
import java.awt.*;
/* 范例名称:GridLayout应用举例
* 源文件名称:TestGridLayout
* 要 点:GridLayout布局管理器的性质及用法
*/
public class TestGridLayout{
public static void main(String args[]) {
Frame f = new Frame("Java窗体");
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.setVisible(true);
}
}
运行结果:
五布局管理器总结
(1)综合案例
使用Container的嵌套实现下面的布局:
TestButtons.java源代码:
import java.awt.*;
public class TestButtons{
public static void main(String args[]) {
Frame f = new Frame("Java窗体");
f.setLayout(new GridLayout(2,1));
f.setLocation(300,400);
f.setSize(400,300);
f.setBackground(new Color(204,204,255));
Panel p1 = new Panel(new BorderLayout());
Panel p2 = new Panel(new BorderLayout());
Panel p11 = new Panel(new GridLayout(2,1));
Panel p21 = new Panel(new GridLayout(2,2));
p1.add(new Button("BUTTON"),BorderLayout.WEST);
p1.add(new Button("BUTTON"),BorderLayout.EAST);
p11.add(new Button("BUTTON"));
p11.add(new Button("BUTTON"));
p1.add(p11,BorderLayout.CENTER);
p2.add(new Button("BUTTON"),BorderLayout.WEST);
p2.add(new Button("BUTTON"),BorderLayout.EAST);
for(int i =1;i<=4;i++){
p21.add(new Button("BUTTON"));
}
p2.add(p21,BorderLayout.CENTER);
f.add(p1);f.add(p2);
f.setVisible(true);
}
}
运行结果如上。
(2)布局管理器总结
Frame类是一个顶级窗口,Frame类的缺省布局管理器为BorderLayout。
Panel对象无法单独显示,必须添加到某个容器中。
Panel类的缺省布局管理器为FlowLayout。
当把Panel对象作为一个组件添加到某个容器中后,该Panel对象仍然可以有自己的布局管理器。
使用布局管理器时,布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件大小和位置属
性,如果视图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。
如果用户确实需要亲自设置组件大小或位置,则应取消布局管理器,方法为:setLayout(null);。
以上是关于JavaSE学习55:GUI编程之布局管理器的主要内容,如果未能解决你的问题,请参考以下文章