【黑马程序员】第九章:GUI(图形用户界面)

------- android培训java培训、期待与您交流! ----------


     GUI全称是Graphical User Interface,即图形用户界面。顾名思义,就是应用程序提供给用户操作的图形界面,包括窗口、惨淡、按钮、工具栏和其他各种图形界面元素。

     Java中针对GUI设计提供了丰富的类库,这些类分别位于java.awt和javax.swing包中,简称AWT和Swing。

一、AWT概述

   AWT是用于创建图形用户界面的一个工具包,它提供了一系列用于实现图形界面的组件,如窗口、按钮、文本框、对话框等。

   在AWT中组件分为两大类,这两类的积累跟别是Component和MenuComponent。其中MenuComponent是所有与菜单相关组件的父类,Component则是出菜单外其他AWT组件的父类,它表示一个能以图形化方式显示出来,并与用户交互的对象。

   Componnet类通常被称为组件,根据Componnet的不同作用,可以将其分为基本组件类和容器类。基本组件类是诸如按钮、文本框之类的图形界面元素,而容器类则是通过Component的子类Container实例化的对象。Container类表示容器,它是一种特殊的组件,可以用来容纳其他组件。Container容器又分为两种类型,风别是Window和Panel。

1、Window

   Window类是不依赖其他容器而独立存在的容器,它有两个子类,分别是Frame类和Dialog类。Frame类用于创建一个具有标题栏的框剪窗口,作为程序的主界面。Dialog类用于创建一个对话框,实现与用户的信息交互。

2、Panel

   Panel也是一个容器,但是它不能单独存在,只能存在其他容器(Window或其子类)中,一个Panel嗲表了一个长方形的区域,在这个区域中可以容纳其他组件。在程序中通常会使用Panel来实现一些特殊的布局。

class PanelDemo{
	public static void main(String[] args){
		Frame f = new Frame("我的窗体");
		f.setSize(400,300);
		f.setLocation(300,300);
		f.setVisible(true);
	}
}


二、AWT事件处理

1、事件处理机制

   时间处理机制专门用于响应用户的操作,比如点击鼠标、按下键盘等操作,就需要使用AWT的时间处理机制。

  • 事件对象(Event):封装了GUI组件上发生的特定事件。(通常就是用户的一次操作)
  • 事件源(组件):时间发生的场所,通常就是产生事件的组件。
  • 监听器(Listener):负责监听时间源上发生的事件,并对各种时间做出相应处理的对象(对象中包含时间处理器)。
  • 时间处理器:监听器对象对接收的时间对象进行相应处理的方法。

import java.awt.*;
import java.awt.event.*;
class AWTDemo{
	public static void main(String[] args){
		//创建窗体
		Frame f = new Frame("我的电脑");
		//设置窗体大小
		f.setSize(500,300);
		//设置窗体出现的位置
		f.setLocation(300,300);
		//设置窗体可见
		f.setVisible(true);
		//为窗体组件添加监听器
		f.addWindowListener(new WindowListener(){
			//对时间做出处理
			public void windowClosing(WindowEvent e){
				Window window = e.getWindow();
				window.setVisible(false);
				//释放窗口
				window.dispose();
			}
			public void windowActivated(WindowEvent e){}
			public void windowClosed(WindowEvent e){}
			public void windowDeactivated(WindowEvent e){}
			public void windowDeiconified(WindowEvent e){}
			public void windowIconified(WindowEvent e){}
			public void windowOpened(WindowEvent e){}
		});
	}
}


2、事件适配器

   为了实现WindowListener接口,需要实现接口中定义的7个方法,然而只需要用到windowClosing()方法,其他6个方法都是空实现。针对这样的问题,JDK提供了一些适配类,他们是监听器接口的默认实现类,这些实现类中实现了接口的所有方法,但方法中没有任何代码。

class WindowAdapterDemo{
	public static void main(String[] args){
		Frame f = new Frame("我的电脑");
		f.setSize(500,300);
		f.setLocation(300,300);
		f.setVisible(true);
		f.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				Window window = (Window)e.getCompenent();
				window.dispose();
			}
		});
	}
}

三、常用事件分类

   在AWT中提供了丰富的时间,大致可以分为窗体事件(WindowEvent)、鼠标事件(MouseEvent)、键盘事件(KeyEvent)、动作事件(ActionEvent)等。

1、窗体事件

   大部分GUI应用程序都需要使用Window窗体事件对象作为外层的容器,可以说窗体对象是所有GUI应用程序的基础,应用程序中通常都是讲其他组件直接或间接地置于窗体中。在应用程序中,当对窗体时间进行处理时,首先需要定义一个类实现WindowListener接口作为窗体监听器,然后通过addWindowListener()方法将窗体对象与监听器绑定。

class WindowEventDemo{
	public static void main(String[] args){
		Frame f = new Frame("我的电脑");
		f.setSize(500,300);
		f.setLocation(300,300);
		f.setVisible(true);
		f.addWindowListener(new WindowListener(){
			public void windowOpened(WindowEvent e){
				System.out.println("WindowOpened-->窗体打开事件");
			}
			public void windowIconified(WindowEvent e){
				System.out.println("WindowIconified-->窗体图标化事件");
			}
			public void WindowDeiconified(WindowEvent e){
				System.out.println("WindowDeiconified-->窗体取消图标化事件");
			}
			public void windowDeactivated(WindowEvent e){
				System.out.println("windowDeactivated-->窗体停用事件");
			}
			public void windowActivated(WindowEvent e){
				System.out.println("windowActivated-->窗体激活事件");
			}
			public void windowClosing(WindowEvent e){
				System.out.println("windowClosing-->窗体正在关闭事件");
			}
			public void windowClosed(WindowEvent e){
				System.out.println("windowClosed-->窗体关闭事件");
			}
		});
	}
}

2、鼠标事件

   在图形用户界面中,用户会经常通过鼠标来进行选择、切换界面等操作,这些操作被定义为鼠标事件,起哄包括鼠标按下、鼠标松开、鼠标单击等。JDK中提供了一个MouseEvent类用于表示鼠标事件,几乎所有的组件都可以产生鼠标事件,处理鼠标事件需要先实现MouseListener接口定义监听器,也可以通过继承适配器MouseAdapter类来实现,燃豆调用addMouseListener()方法将监听器绑定到事件源对象。

class WindowEventDemo{
	public static void main(String[] args){
		Frame f = new Frame("我的电脑");
		f.setLayout(new FlowLayout());
		f.setSize(500,300);
		f.setLocation(300,300);
		f.setVisible(true);
		Button b = new Button("按钮");
		f.add(b);
		b.addMouseListener(new MouseListener(){
			public void mouseEntered(MouseEvent e){
				System.out.println("mouseEnte
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值