AWT的基础知识

本章任务

1.创建窗口,指定大小,位置,在窗口上可以自由添加组件,

2.自己可以合理布局

3.处理常见的按钮点击事件

本章目标

1.熟练使用JFrame的相关组件

2.能够将数据库表中的数据按照自己的意愿,展示在窗口容器中

3.对常见的布局管理器了解

4.能够理解事件处理机制,熟练使用常见的事件监听器(ActionListener,MouseListener),事件适配器(MouseAdapter)

AWT的基础知识

GUI(Graphical user interface,即图形用户界面),应用程序提供给用户操作的图形用户界面,包括菜单、窗口、按钮、工具栏、和其他各种屏幕元素。

JDK中提供了AWT和Swing两个包,用于GUI程序的设计和开发。AWT是早期版本,swing是对awt的改进,提供了更加丰富的组件和功能,掌握了awt基本上就掌握了swing

 

GUI结构图

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)

 

示例1:创建JFrame窗口,设置大小为(400,500),位置(200,100),设置窗口关闭操作,窗口可见。

package com.njwb.components.use;

import javax.swing.JFrame;

/**

 * 新建一个窗口,在屏幕的指定位置显示

 * JFrame Frame的子类

 * @author Administrator

 *

 */

public class Test01 {

public static void main(String[] args) {

//创建一个窗口

JFrame jf = new JFrame("My first JFrame");

//设置大小

jf.setSize(400, 500);

//设置位置(坐标)

jf.setLocation(200, 100);

//设置关闭操作, 退出即关闭

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置窗口可见

jf.setVisible(true);

}

}

示例2 窗口居中显示(获取本机工具包—>获取屏幕尺寸—>(屏幕宽,高)),窗口大小仍为(400,500),窗口位置((w1-400)/2,(h1-500)/2)

package com.njwb.components.use;

import java.awt.Dimension;

import java.awt.Toolkit;

import javax.swing.JFrame;

/**

 * 屏幕居中显示

 * setLocation(x,y) x,y指的的是你设置的窗口的左上角的坐标

 * @author Administrator

 *

 */

public class Test02 {

public static void main(String[] args) {

//创建一个窗口

JFrame jf = new JFrame("My second JFrame");

//设置大小

jf.setSize(400, 500);

//获取本机的工具包

Toolkit tk = Toolkit.getDefaultToolkit();

//获取屏幕的尺寸

Dimension d = tk.getScreenSize();

//获取屏幕的宽

int width = d.width;

//获取屏幕的高

int height = d.height;

//设置位置(坐标)

//jf.setLocation(width/2-200, height/2-250);

jf.setLocation((width-400)/2, (height-500)/2);

//设置关闭操作, 退出即关闭

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置窗口可见

jf.setVisible(true);

}

}

示例3: 添加组件(添加1个按钮位置(100,400,80,40)),布局管理器设置为空,其余设置保持不变,

package com.njwb.components.use;

import java.awt.Dimension;

import java.awt.Toolkit;

import javax.swing.JButton;

import javax.swing.JFrame;

/**

 * 添加按钮

 * @author Administrator

 *

 */

public class Test03 {

public static void main(String[] args) {

//创建一个窗口

JFrame jf = new JFrame("My second JFrame");

//设置布局管理器为null  默认是BorderLayout

jf.setLayout(null);

//创建一个按钮

//JButton but = new JButton("按钮");

JButton but = new JButton();

//setText()设置按钮的显示文本

but.setText("按钮");

//该位置是相对于父容器左上角而言

//but.setLocation(100, 400);

//but.setSize(80, 40);

but.setBounds(100, 400, 80, 40);

//将按钮添加到窗口中

jf.add(but);

//设置大小

jf.setSize(400, 500);

//获取本机的工具包

Toolkit tk = Toolkit.getDefaultToolkit();

//获取屏幕的尺寸

Dimension d = tk.getScreenSize();

//获取屏幕的宽

int width = d.width;

//获取屏幕的高

int height = d.height;

//设置位置(坐标)

jf.setLocation((width-400)/2, (height-500)/2);

//设置关闭操作, 退出即关闭

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置窗口可见

jf.setVisible(true);

}

}

布局管理器

BorderLayout

这是一个布置容器的边框布局,它可以对容器组件进行安排,并调整其大小,使其符合下列五个区域:北、南、东、西、中。每个区域最多只能包含一个组件,并通过相应的常量进行标识:NORTH、SOUTH、EAST、WEST、CENTER。当使用边框布局将一个组件添加到容器中时,要使用这五个常量之一。

根据其首选大小和容器大小的约束 (constraints) 对组件进行布局。NORTH  SOUTH 组件可以在水平方向上拉伸;而 EAST  WEST 组件可以在垂直方向上拉伸;CENTER 组件可同时在水平和垂直方向上拉伸,从而填充所有剩余空间

package com.njwb.layoutmanager.use;

import java.awt.BorderLayout;

import java.awt.Dimension;

import java.awt.Toolkit;

import javax.swing.JButton;

import javax.swing.JFrame;

/**

 * 布局1 JFrame的默认布局管理器  边框布局

 * BorderLayout()

 * BorderLayout(int hgap, int vgap)

 * @author Administrator

 *

 */

public class TestBorderLayout {

public static void main(String[] args) {

//创建一个窗口

JFrame jf = new JFrame("My second JFrame");

//按钮之间没有间隔

//jf.setLayout(new BorderLayout());

// 水平间距, 垂直间距

jf.setLayout(new BorderLayout(5,12));

//创建一个按钮

JButton but1 = new JButton("按钮1");

but1.setBounds(100, 400, 80, 40);

JButton but2 = new JButton("按钮2");

but2.setBounds(100, 400, 80, 40);

JButton but3 = new JButton("按钮3");

but3.setBounds(100, 400, 80, 40);

JButton but4 = new JButton("按钮4");

but4.setBounds(100, 400, 80, 40);

JButton but5 = new JButton("按钮5");

but5.setBounds(100, 400, 80, 40);

//将按钮添加到窗口中

//两种都可以, 指定区域的BorderLayout.North 可以放在第一个参数或者第2个参数都可以

//jf.add(BorderLayout.NORTH,but1);

jf.add(but1,BorderLayout.NORTH);

jf.add(BorderLayout.SOUTH,but2);

jf.add(BorderLayout.WEST,but3);

jf.add(BorderLayout.EAST,but4);

jf.add(BorderLayout.CENTER,but5);

//设置大小

jf.setSize(400, 500);

//获取本机的工具包

Toolkit tk = Toolkit.getDefaultToolkit();

//获取屏幕的尺寸

Dimension d = tk.getScreenSize();

//获取屏幕的宽

int width = d.width;

//获取屏幕的高

int height = d.height;

//设置位置(坐标)

jf.setLocation((width-400)/2, (height-500)/2);

//设置关闭操作, 退出即关闭

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置窗口可见

jf.setVisible(true);

}

}

FlowLayout

流布局一般用来安排面板中的按钮。它使得按钮呈水平放置,直到同一条线上再也没有适合的按钮。线的对齐方式由 align 属性确定。可能的值为:

· LEFT 

· RIGHT 

· CENTER 

· LEADING 

· TRAILING 

package com.njwb.layoutmanager.use;

import java.awt.Dimension;

import java.awt.Toolkit;

import javax.swing.JButton;

import javax.swing.JFrame;

/**

 * 布局2 Panel面板的默认布局管理器 流式布局

 * FlowLayout(int align)

 * FlowLayout(int align, int hgap, int vgap)

 * @author Administrator

 *

 */

public class TestFlowLayout {

public static void main(String[] args) {

//创建一个窗口

JFrame jf = new JFrame("My second JFrame");

//按钮之间没有间隔  默认居中对齐,水平,垂直,都是5个单位

//jf.setLayout(new FlowLayout()); 左对齐 ,水平,垂直都是5个单位

//jf.setLayout(new FlowLayout(FlowLayout.LEFT));

//水平间距是10个单位,垂直间距是20个单位

//jf.setLayout(new FlowLayout(FlowLayout.RIGHT,10,20));

//创建一个按钮

JButton but1 = new JButton("按钮1");

but1.setBounds(100, 400, 80, 40);

JButton but2 = new JButton("按钮2");

but2.setBounds(100, 400, 80, 40);

JButton but3 = new JButton("按钮3");

but3.setBounds(100, 400, 80, 40);

JButton but4 = new JButton("按钮4");

but4.setBounds(100, 400, 80, 40);

JButton but5 = new JButton("按钮5");

but5.setBounds(100, 400, 80, 40);

//将按钮添加到窗口中

jf.add(but1);

jf.add(but2);

jf.add(but3);

jf.add(but4);

jf.add(but5);

//设置大小

jf.setSize(400, 500);

//获取本机的工具包

Toolkit tk = Toolkit.getDefaultToolkit();

//获取屏幕的尺寸

Dimension d = tk.getScreenSize();

//获取屏幕的宽

int width = d.width;

//获取屏幕的高

int height = d.height;

//设置位置(坐标)

jf.setLocation((width-400)/2, (height-500)/2);

//设置关闭操作, 退出即关闭

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置窗口可见

jf.setVisible(true);

}

}

GridLayout

GridLayout 类是一个布局处理器,它以矩形网格形式对容器的组件进行布置。容器被分成大小相等的矩形,一个矩形中放置一个组件。

package com.njwb.layoutmanager.use;

import java.awt.Dimension;

import java.awt.GridLayout;

import java.awt.Toolkit;

import javax.swing.JButton;

import javax.swing.JFrame;

/**

 * 布局3  几行几列 网格布局

 * GridLayout(int rows, int cols)

 *  行数,列数  水平间距  垂直间距

 * GridLayout(int rows, int cols, int hgap, int vgap)

 * @author Administrator

 *

 */

public class TestGridLayout {

public static void main(String[] args) {

//创建一个窗口

JFrame jf = new JFrame("My second JFrame");

//2 行,3

//jf.setLayout(new GridLayout(2,4));

jf.setLayout(new GridLayout(2,4,5,20));

//创建一个按钮

JButton but1 = new JButton("按钮1");

but1.setBounds(100, 400, 80, 40);

JButton but2 = new JButton("按钮2");

but2.setBounds(100, 400, 80, 40);

JButton but3 = new JButton("按钮3");

but3.setBounds(100, 400, 80, 40);

JButton but4 = new JButton("按钮4");

but4.setBounds(100, 400, 80, 40);

JButton but5 = new JButton("按钮5");

but5.setBounds(100, 400, 80, 40);

JButton but6 = new JButton("按钮6");

but6.setBounds(100, 400, 80, 40);

JButton but7 = new JButton("按钮7");

but7.setBounds(100, 400, 80, 40);

//将按钮添加到窗口中

jf.add(but1);

jf.add(but2);

jf.add(but3);

jf.add(but4);

jf.add(but5);

jf.add(but6);

jf.add(but7);

//设置大小

jf.setSize(400, 500);

//获取本机的工具包

Toolkit tk = Toolkit.getDefaultToolkit();

//获取屏幕的尺寸

Dimension d = tk.getScreenSize();

//获取屏幕的宽

int width = d.width;

//获取屏幕的高

int height = d.height;

//设置位置(坐标)

jf.setLocation((width-400)/2, (height-500)/2);

//设置关闭操作, 退出即关闭

jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置窗口可见

jf.setVisible(true);

}

}

事件处理机制

通过GUI组件用户可以对应用程序进行各种操作,反之,应用程序可以通过各种组件来收集用户的操作信息,比如移动鼠标,按下键盘等,GUI只是提供给用户操作的图形界面,但GUI本身并不对用户的操作结果负责,比如单击按钮,程序并不知道在单击按钮时应该做出什么样的反应,如果想要单击按钮时程序响应某种功能,我们就必须编写相应的程序代码。

上一节的程序中在我们点击关闭按钮时并不能关闭窗口和结束程序,只能通过结束进程的方式结束。

Java设计了一种专门的方式称为事件处理机制,来处理程序和用户之间的交互。

在事件处理机制中需要了解3个重要的概念

1、 事件:用户对组件的操作称为事件

2、 事件源:发生事件的组件就是事件源

3、 事件处理器:某个java类中负责处理事件的成员方法。(我们要对事件进行处理肯定是编写程序代码,当发生了某种事件,只要调用写好的程序代码即可)

事件源、事件、事件处理器之间的工作关系:

对某个事件的处理的方法必须是java中的某个类的成员方法,这个类就称为事件监听器类,一个事件监听器对象必须先跟某个事件源进行关联,关联的过程称为监听器向事件源注册监听,这样当组件发生事件时,就知道该找哪个事件监听对象中的哪个方法了。

注册完后,当组件接收到外部的作用,组件就会产生事件对象,并将事件对象传递给事件处理器来处理,在事件处理器中,只要打开事件对象看事件对象中的信息就知道发生了什么样的事情和事情的一些细节,比如发生事件时鼠标的位置。

举例:按钮点击事件

package com.njwb.components.use;

import java.awt.Dimension;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

 

/**

 * 点击按钮,在控制台输出一句话按钮被点击

 * 事件的源头 : 按钮

 * 事件处理器: 点击按钮,引发一个响应,这个响应需要1个类来处理掉,这个类 就叫做 事件处理器

 * 事件源  和事件处理器之间如何建立联系?   给事件源注册监听  addActionListener(事件处理器对象);

 * @author Administrator

 *

 */

public class Test04 {

public static void main(String[] args) {

//创建一个窗口

JFrame jf = new JFrame("My second JFrame");

//设置布局管理器为null  默认是BorderLayout

jf.setLayout(null);

//创建一个按钮

JButton but = new JButton("按钮");

but.setBounds(100, 400, 80, 40);

//创建1个事件处理器对象

//给自身注册监听

but.addActionListener(new ActionListener(){

//动作发生时,会有一个事件传入,在该方法中将该事件处理掉(对该事件作出响应)

@Override

public void actionPerformed(ActionEvent e) {

System.out.println("按钮被点击");

}

});

//将按钮添加到窗口中

jf.add(but);

//设置大小

jf.setSize(400, 500);

//获取本机的工具包

Toolkit tk = Toolkit.getDefaultToolkit();

//获取屏幕的尺寸

Dimension d = tk.getScreenSize

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为什么需要GUI? 我们前面编写的程序命令行的,用户的体验度极差。 抽象窗口工具包(Abstract Window Tookit)是为java程序提供建立图形用户界面(Graphics User Interface GUI)的工具集。主要包含如下组件: 1. 用户界面组件 2. 事件处理模型 3. 图形图像工具(形状、颜色、字体) 4. 布局管理器 AWT的优势: 1. 最早的JAVA GUI包,内嵌到JDK中,无需引入其他类,功能稳定 2. AWT组件都是线程安全的 3. 界面编程基础. 学会AWT, 很容易去学swing/SWT等功能较强大的GUI组件. AWT的缺点: 1. 组件的创建完全依赖操作系统实现,导致不同的操作系统下出现不同的外观。 说白了,awt的组件是由操作系统绘制的,我们也说awt组件是重量级的组件。 这个工具包提供了一套与本地图形界面进行交互的接口。AWT 中的图形函数与操作系统所提供的图形函数之间有着一一对应的关系,我们把它称为peers。也就是说,当我们利用 AWT 来构件图形用户界面的时候,我们实际上是在利用操作系统所提供的图形库。由于不同操作系统的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的"一次编译,到处运行"的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。 AWT并没有为GUI组件提供真正的实现,而是调用运行平台的GUI组件来创建和平台一致的对等体peers,因此程序中Textarea实际上是windows的多行文本域组件的对等体,具有和他相同的行为。所以,你右键单击textarea会出现菜单… 2. 线程安全导致运行速度慢 3. 为了保证程序的可移植性,AWT组件集遵循最大公约数原则,即AWT只拥有所有平台上都存在的组件的公有集合。有些常用的组件不支持,比如:表、树、进度条等。字体也只能支持4种。 为什么还需要学习AWT? 实际开发中使用AWT的情况非常少,但是我们仍然有必要学习AWT。主要原因如下: 1. Swing是在AWT基础上构建的,事件模型和一些支持类(形状、颜色、字体)都一样。掌握AWT有利于后面学习SWING. Eclipse不是swing开发的,是swt开发的。 2. 学习一下GUI编程。事实上,编程思路和其他语言类似

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值