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);。

时间: 2024-10-12 22:58:57

JavaSE学习55:GUI编程之布局管理器的相关文章

JAVA语言GUI编程之布局管理器总结

/*   时间:2015年3月18日09:21:57   目的:测试嵌套布局的使用.   Panel 是最简单的容器类.应用程序可以将其他组件放在面板提供的空间内,这些组件包括其他面板.   面板的默认布局管理器是 FlowLayout 布局管理器.   面板的构造方法有两个:    public Panel(LayoutManager layout)创建一个具有指定布局管理器的面板    public Panel();使用默认的布局管理器创建面板,所有面板的默认布局管理器都是FlowLayou

JAVA学习笔记(四十五) - 布局管理器

FlowLayout流式布局管理器 /* * FlowLayout流式布局管理器 */ public class Test03 { public static void main(String[] args) { Frame frame=new Frame("My Frame"); Button btn1=new Button("按钮1"); Button btn2=new Button("按钮2"); Button btn3=new Butto

布局管理器之CardLayout(卡片布局管理器)

对于选项卡这个概念大家可能不会陌生,就是在一个窗口中可以切换显示多页不同的内容,但同一时间只能是其中的某一页可见的,这样的一个个的页面就是选项卡. CardLayout就是类似的这样一个布局管理器,它能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像重叠在一起的一幅扑克牌,组件重叠在一起,初始时显示该空间中第一个组件,通过CardLayout类提供的方法可以切换该空间中显示的组件. 下面我们来看一个例子,实现CardLayout布局管理器的使用. 创建一个使用CardLayout布局

Java之GUI编程(二)——布局管理器

在上篇博客Java之GUI编程(一)中我已经对GUI编程的组件和事件做了简单介绍了,现在来看看另外一部分关于组件在各个平台是如何做到仍能保持自己合理的位置大小以及外观的. 已经说了Java是跨平台运行的,但是不同的平台对于点及坐标的定义不完全相同.而且屏幕的解析度分辨率不同也会造成位置的变化,为了确保每个组件的相对位置和大小以及外观,java就设计了布局管理器. 布局管理器是对容器中的元素进行管理,按照一定的规则排放容器里面的元素.它控制了组件的摆放. 布局管理器分类: FlowLayout:浮

java基础学习总结——GUI编程(二)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——GUI编程(二) 一.事件监听 测试代码一: 1 package cn.javastudy.summary; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 6 public class TestActionEvent { 7 public static void main(String args[]) { 8 Frame f = new Frame("

java基础学习总结——GUI编程(一)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! java基础学习总结——GUI编程(一) 一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Component里面有一种比较特殊的图形元素叫Container,Container(容器)在图形界面里面是一种可以容纳其它Component元素的一种容器,Container本身也是一种Component的,Container里面也可以容纳别的Container. Cont

java基础学习总结——GUI编程(一) 还未仔细阅读

一.AWT介绍 所有的可以显示出来的图形元素都称为Component,Component代表了所有的可见的图形元素,Component里面有一种比较特殊的图形元素叫Container,Container(容器)在图形界面里面是一种可以容纳其它Component元素的一种容器,Container本身也是一种Component的,Container里面也可以容纳别的Container. Container里面又分为Window和Pannel,Window是可以独立显示出来的,平时我们看到的各种各样的

java进阶09 GUI图形界面 布局管理器之BorderLayout

前面虽然实现了窗口,但是一般的应用有很多其他东西,如按钮,输入框之类的. 而这些都是建立在一个东西上面的,那就是布局管理器. 常用的布局管理器有3个 BorderLayout:边界布局管理器 FlowLayout:流式布局管理器 GridLayout:网格布局管理器 今天先说说BorderLayout 我们先修改下UI类,这次是最后一次修改,这次会将UI类与管理器和控件彻底分开,再也不用操作UI类 package Frame; import javax.swing.JFrame; public

wxPython布局管理器(sizer)学习(1)

个人认为学习GUI程序开发,最重要的两个基础点就是:事件处理和界面布局.事件处理能够让你在界面上的控件被鼠标.按键等触发的时候做出合适的响应,比如点击“保存”按钮之后弹出标准的文件保存对话框.另外一件重要的就是界面的布局,之所以要有GUI程序,就是为了有良好的用户体验,如果一个软件界面布局乱七八糟的话,肯定是不合适的.至于按钮.文本框.静态文本这些组件,不过是通过相应的类产生实例并用Add之类的方法添加到面板上而已. wxPython的sizer是用于自动布局一组窗口(之前提到过GUI程序开发中