Java GUI编程

AWT

  • AWT(Abstract Window Toolkit)包括了很多类和接口,用于Java Application的GUI(图形用户界面 )编程。
  • GUI的各种元素(如:窗口,按钮,文本框等)由Java类来实现。
  • 使用AWT所涉及的类一般在Java.awt包及其子包中。
  • Container和Component是AWT中的两个核心类。

java Container 命名 container在java中_java Container 命名

Component&Container

  • Java的图形用户界面的最基本的组成部分是Component,Component类及其子类的对象用来描述以图形化的方式显示在屏幕上并能与用户进行交互的GUI元素。例如,一个按钮,一个标签等。
  • 一般的Component对象不能独立的显示出来,必须将“”放在”其一的Container对象中才能显示出来。
  • Container是Component子类,Container子类对象可以“容纳”别的Component对象。
  • Container对象可以使用方法 add(...) 向其中添加其他Component对象。
  • Container是Component的子类,因此Container对象也可以被当作Component对象添加到其他Container对象中。
  • 两种常用的Container:
  • Window:其对象表示自由停泊的顶级窗口。
  • Panel:其对象可作为容纳其他Component对象,但不能独立存在,必须添加到其他Container中(如Window 或 Applet)。

Frame

  • Farme是Window的子类,由Frame或其子类创建的对象为一个窗体。
  • Frame的常用构造方法:

          Frame()

          Frame(String s) //创建标题为字符串s的窗口。

setBounds(int x,int y,int width,int height)//设置窗体的位置和大小,x,y是左上角坐标,width和height是宽度和高度
setSize(int width,int height) //设置窗体的大小,width和height是宽度和高度
setLocation(int x,int y)//设置窗体的位置,x,y是左上角坐标
setBackground(Color c)//设置背景颜色,参数为Color对象
setVisible(boolean b)//设置是否可见,true可见,false不可见】
setTitle(String name)//设置窗体的标题
setResizable(boolean b)//设置是否可以调整大小,true可调整,false不可调整
package com.caj;

import java.awt.Color;
import java.awt.Frame;

public class TestFrame {
public static void main(String[] args) {
	Frame f=new Frame();
	//设窗体的大小
	f.setSize(200, 300);
	//设置窗体的位置
	f.setLocation(300, 300);
	//设置窗体的标题
	f.setTitle("第一个窗体");
	//设置窗体的背景颜色
	f.setBackground(Color.blue);
	//设置窗体是否可以改变大小;不可以
	f.setResizable(false );
	//设置窗体是否可见
	f.setVisible(true);
}
}

运行结果:

java Container 命名 container在java中_java Container 命名_02

Panel

  • Panel对象可以看成可以容纳Component的空间
  • Panel对象可以拥有自己的布局管理器
  • Panel类拥有从其父类继承来的 

setBounds(int x,int y,int width,int height)//设置大小和位置

setSize(int width,int height)//设置大小

setLocation(int x,int y)//设置位置

setBackground(Color c)//设置背景颜色

setLayout(LayoutManager  mgr)//设置布局管理器

Panel 的构造方法

Panel()//使用默认的FlowLayout类布局管理器初始化

Panel(LayoutManager layout)//使用指定的布局管理器

package com.caj;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;

public class TestPanel {
public static void main(String[] args) {
	Frame f=new Frame();
	Panel p=new Panel();
	f.setBounds(200, 200, 500, 500);
	
	f.setLayout(null);
	f.setBackground(Color.orange);
	p.setBounds(100, 100, 200, 200);
	p.setBackground(Color.pink);
	f.add(p);
	f.setVisible(true);
}
}

运行结果:

java Container 命名 container在java中_java_03

布局管理器

java语言中,提供了布局管理器类的对象可以管理

管理Component在Container中的布局,不必直接设置Component的位置和大小

每个Container都有一个布局管理器对象,当容器需要对某个组件进行定位或判断其尺寸大小时,就会调用其对应的布局管理器,调用Container的setLayout方法改变其布局管理器对象

AWT提供了五种布局管理器类

  • FlowLayout
  • BorderLayout
  • GridLayout
  • CardLayout
  • GridBagLayout

流式布局:FlowLayout

package com.caj;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

public class TestFlowLayout {
public static void main(String[] args) {
	Frame f=new Frame("Flow Layout");
	Button b1=new Button("OK");
	Button b2=new Button("Open");
	Button b3=new Button("Close");
	f.setLayout(new FlowLayout(FlowLayout.LEFT));//布局管理器从左边开始排列
	f.add(b1);
	f.add(b2);
	f.add(b3);
	f.setSize(300, 300);
	f.setVisible(true);
}
}

运行结果:

java Container 命名 container在java中_java Container 命名_04

java Container 命名 container在java中_java_05

package com.caj;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.Frame;

public class TestFlowLayout {
public static void main(String[] args) {
	Frame f=new Frame("Flow Layout");
	Button b1=new Button("OK");
	Button b2=new Button("Open");
	Button b3=new Button("Close");
	f.setLayout(new FlowLayout());//缺省的
	f.add(b1);
	f.add(b2);
	f.add(b3);
	f.setSize(300, 300);
	f.setVisible(true);
}
}

运行结果:

java Container 命名 container在java中_java Container 命名_06

   

java Container 命名 container在java中_Java_07

    

如果不给FlowLayout设置变量,排列时组件居中,一次从左向右排列,一列排满向下一列继续排列。

BorderLayout(边框式布局)

BorderLayout是Frame类的默认布局管理器。

BorderLayout将整个容器的布局划分成

  • 东(EAST)
  • 西(WEST)
  • 南(SOUTH)
  • 北(NORTH)
  • 中(CENRER)五个区域,组件只能被添加到指定的区域。

如不指定组件的加入部位,则默认加入到CENTER区。

每个区域只能加入一个组件,如加入多个,则先前加入的会被覆盖。

BorderLayout型布局容器管理尺寸缩放原则:

  • 北、南两个区域在水平 方向缩放。
  • 东、西两个区域在垂直方向缩放。
  • 中部可在两个方向上缩放。
/*
 *BorderLayout的示例
 */

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

public class TestBorderLayout {
public static void main(String[] args) {
	Frame f=new Frame("BorderLayout");
	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.setSize(200, 200);
	f.setVisible(true);
	
}
}

运行结果:

java Container 命名 container在java中_java Container 命名_08

GridLayout布局管理器

GridLayout型布局管理器将空间划分成规则的矩形网格,每个单元格区域大小相等。组件被添加到每个单元格中,先从左到右添满一行后换行,再从上到下。

在GridLayout构造方法中指定分割的行数和列数:

如:GridLayout(3,4)

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;

public class TestGirdLayout {
public static void main(String[] args) {
	Frame f=new Frame("GridLayout Example");
	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);
}
}

运行结果:

java Container 命名 container在java中_Java_09