第十一章
Download
1 / 129

第十一章 - PowerPoint PPT Presentation


  • 133 Views
  • Uploaded on

第十一章. 图形用户界面设计. 图形用户界面设计. 11.1 AWT 组件概述 11.2 布局管理 11.3 事件处理. 11.1 AWT 组件概述. 早期的 JDK 版本中提供了 Java 抽象窗口工具集 (Abstract Window Toolkit, AWT) ,其目的是为程序员创建图形用户界面提供支持。 AWT 组件定义在 java.awt 包中,包括组件类、组件布局类等 。. Java.awt 的继承关系. 1 .组件.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '第十一章' - makya


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
第十一章

图形用户界面设计


图形用户界面设计

  • 11.1 AWT组件概述

  • 11.2 布局管理

  • 11.3 事件处理


11 1 awt
11.1 AWT组件概述

早期的JDK版本中提供了Java抽象窗口工具集(Abstract Window Toolkit, AWT),其目的是为程序员创建图形用户界面提供支持。AWT组件定义在java.awt包中,包括组件类、组件布局类等 。


Java awt
Java.awt的继承关系


1.组件

组件(component)是构成图形用户界面的基本成分和核心元素。组件类(Component)是一个抽象类,是AWT组件类层次结构的根类,实际使用的组件都是Component类的子类。Component类提供对组件操作的通用方法,包括设置组件位置、设置组件大小、设置组件字体、响应鼠标或键盘事件、组件重绘等。


2.容器

容器(container)是一种特殊组件,它能容纳其他组件。它在可视区域内显示其它组件。容器是组件,在容器之中还可以放置其它容器,可以使用多层容器构成富于变化的界面。


3.窗口与面板

容器有2种:窗口(window)和面板(panel)。

窗口可独立存在,可被移动,也可被最大化和最小化,有标题栏、边框,可添加菜单栏。

面板不能独立存在,必须包含在另一个容器中。

面板没有标题,没有边框,不可添加菜单栏。

一个窗口可以包含多个面板,一个面板也可以包含另一个面板,但面板不能包含窗口。

窗口类Window和面板类Panel都是容器类Container的子类。


4.框架与对话框

窗口类Window主要有2个子类:框架类(Frame)和对话框类(Dialog)。


Frame
框架(Frame)

  • 框架(frame)是一种带标题栏并且可以改变大小的窗口。

  • 应用程序中,使用框架作为容器,在框架中放置组件。

  • 框架类在实例化时默认是最小化的、不可见的,必须通过setSize()方法设置框架大小,通过setVisible(true)方法使框架可见。


Frame1
Frame的构造方法


Frame2
Frame的成员方法


Dialog
对话框(dialog)

  • 对话框(dialog)也是一种可移动的窗口,它比框架简单,没有太多的控制元素,如最大化按钮、状态栏等。

  • 对话框不能作为应用程序的主窗口,它依赖于一个框架窗口而存在,当框架窗口关闭时,对话框也关闭。

  • 对话框类Dialog的构造方法必须声明对话框所依赖的框架窗口。


--创建窗口

import java.awt.*;

class FrmApp

{

static Frame fra=new Frame("FrmApp");

public static void main(String args[])

{

fra.setSize(250,150);

fra.setLocation(100,200);

fra.setVisible(true);

System.out.println("State:"+fra.getState());

System.out.println("Title:"+fra.getTitle());

System.out.println("Visible:"+fra.isVisible());

}

}


程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

State:0

Title:FrmApp

Visible:true


5程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.标签

标签类(Label)组件用于显示一行文本信息。标签只能显示信息,不能用于输入。


Label
Label程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:的构造方法


Label1
Label程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:的成员方法


程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--在窗口中建立1个标签

import java.awt.*;

class LabApp

{

public static void main(String args[])

{

Frame fra=new Frame("LabApp");

Label lab=new Label(); //创建1个空标签

fra.setSize(250,150);

lab.setText("This is a label"); //为标签添加标题

lab.setAlignment(Label.CENTER);

lab.setBackground(Color.white); //引用Component类的方法设置标签背景颜色


lab.setForeground(Color.black); //程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:引用Component类的方法设置标签标题颜色

Font fnt=new Font("Serief", Font.ITALIC+Font.BOLD,22);

lab.setFont(fnt);

fra.add(lab);

fra.setVisible(true);

}

}


程序运行时,出现如图所示的窗口。程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:


6程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.按钮

按钮是最常见的一种组件,用来控制程序运行的方向。用户单击按钮时,计算机将执行一系列命令,完成一定的功能。

按钮通过java.awt包的Button类创建。


Button
Button程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:的构造方法


Java awt button
java.awt.Button程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:的方法


程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--在窗口中建立一个按钮

import java.awt.*;

class Buttapp

{

public static void main(String args[])

{

Frame fra=new Frame("ButtApp");

fra.setSize(250,170);

fra.setLayout(null); //关闭页面设置

Button butt=new Button("click");

butt.setSize(100,50);

butt.setLocation(75,60);

fra.add(butt);

fra.setVisible(true); }

}


程序运行时,出现如图所示的窗口。程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:


7程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.文本编辑组件

文本编辑组件有文本行和文本区。

文本行是一个单行文本编辑框,用于输入一行文字。文本行由java.awt包中的TextField类来创建。


Textfield
TextField程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:的构造方法


Textfield1
TextField程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:的成员方法


程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--创建文本行

import java.awt.*;

class TextApp

{

public static void main(String args[])

{

Frame fra=new Frame("文本框程序");

TextField txt1=new TextField(50);

TextField txt2=new TextField("Text Field", 50);

fra.setBounds(0,0,300,200);

fra.setLayout(null);

txt1.setBounds(50,50,130,20); //设置文本框的大小

txt2.setBounds(50,100,130,30);

fra.add(txt1); fra.add(txt2);

fra.setVisible(true); }

}


程序运行时,出现如图所示的窗口。程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:


11.2 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:布局管理

Java提供了多种风格和特点的布局管理器,每一种布局管理器指定一种组件相对位置和大小布局。布局管理器是容器类所具有的特性,每种容器都有一种默认的布局管理器。


11.2 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:布局管理

在java.awt包中共提供了5个布局管理器类:

  • FlowLayout

  • BorderLayout

  • CardLayout

  • GridLayout

  • GridBagLayout

    每个类都是java.lang.Object类的子类。


11 2 1 borderlayout
11.2.1 BorderLayout程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:类

BorderLayout(边布局)的布局策略是把容器内的空间划分为东、西、南、北、中5个区域,这5个区域分别用英文的East、West、South、North、Center表示。向容器中加入每个组件都要指明它放在容器的哪个区域。如果某个区域没有分配组件,则其他组件可以占据它的空间。


Borderlayout
BorderLayout程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:类的构造方法


Borderlayout1
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--应用BorderLayout布局

在窗口中加入5个按钮,采用BorderLayout布局。

import java.awt.*;

class BorLay

{

public static void main(String args[])

{

Frame frm=new Frame("BorderLayout");

BorderLayout layout=new BorderLayout(5,7);

frm.setBounds(0,0,300,200);

frm.setLayout(layout);

Button butN,butS,butW,butE,butC;

butN=new Button("north button");

butS=new Button("south button");


butW=new Button("west button"); 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

butE=new Button("east button");

butC=new Button("center button");

frm.add(butN, BorderLayout.NORTH);

frm.add(butS, BorderLayout.SOUTH);

frm.add(butW, BorderLayout.WEST);

frm.add(butE, BorderLayout.EAST);

frm.add(butC, BorderLayout.CENTER);

frm.setVisible(true);

}

}


程序运行结果如图所示。程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:


11 2 2 flowlayout
11.2.2 FlowLayout程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

FlowLayout(流式布局)的布局策略提供按行布局组件方式,将组件按照加入的先后顺序从左向右排列,当一行排满之后转到下一行继续按照从左向右的顺序排列。组件保持自己的尺寸,一行能容纳的组件的数目随容器的宽度变化。


Flowlayout
FlowLayout程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:类的构造方法


Flowlayout1
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--使用FlowLayout布局

import java.awt.*;

import javax.swing.*;

public class FlowLay

{

public static void main(String args[])

{

Frame frm=new Frame("BorderLayout");

FlowLayout layout=new FlowLayout();

frm.setBounds(0,0,200,200);

frm.setLayout(layout);

Button but1,but2;

TextField txt1,txt2;

but1=new Button("button 1");

but2=new Button("button 2");

txt1=new TextField("text 1",10);

txt2=new TextField("text 2",10);


frm.add(but1);程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

frm.add(but2);

frm.add(txt1);

frm.add(txt2);

frm.setVisible(true);

}

}


运行程序出现如图所示的界面:程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

初始界面 增大窗口宽度后的界面


11 2 3 gridlayout
11.2.3 GridLayout程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

GridLayout(网格布局)管理器将容器划分为大小相等的若干行乘若干列的网格,组件按照从左到右、从上到下的的顺序依此放入各网格中。每个组件占满1格。组件大小随网格大小变化。如果组件数比网格数多,系统将自动增加网格数;如果组件数比网格数少,未用的网格区空闲。


Gridlayout
GridLayout程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:类的构造方法


Gridlayout1
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--使用GridLayout布局

import java.awt.*;

public class GridLay

{

public static void main(String args[])

{

Frame frm=new Frame("GridLayout");

GridLayout layout=new GridLayout(2,2); //定义2行2列的GridLayout

frm.setBounds(0,0,200,200);

frm.setLayout(layout);

String names[]={ "butt1","butt2","butt3","butt4"};


for(int i=0; i<names.length; i++)程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

frm.add( new Button(names[i]));

}

frm.setVisible(true);

}

}


运行程序出现如图所示的界面。程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:


11.3 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:事件处理

11.3.1 委托事件模型

JDK1.1之后采用委托事件模型

(delegation event model)。


1程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.事件

事件(event)是指一个状态的改变,或者一个动作的发生。例如,单击一个按钮,将产生单击事件;单击窗口关闭按钮,产生窗口关闭事件。


2程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.事件类

在Java中,用不同的类处理不同的事件。在java.awt.event包中定义了许多事件类,如单击事件类(ActionEvent)和窗口事件类(WindowEvent)。


3程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.事件源

事件由用户操作组件产生,被操作的组件称为事件源。

例如,用户单击一个按钮,产生单击事件,按钮则是事件源;用户单击窗口关闭按钮,产生窗口关闭事件,窗口组件是事件源。


4程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.事件监听器

在图形界面程序中,不仅需要创建组件,而且还需指定组件所能响应的事件,以及该事件发生时需要执行的动作(语句序列)。


4程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.事件监听器

一个组件能响应哪些事件,响应事件后需执行的语句序列存放在什么位置,这些功能由事件监听器负责。为了实现此功能,在开发程序时,用户需要做以下2件事:

  • 向事件源注册事件监听器

  • 实现事件处理方法


5. 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:事件运作流程

按照委托事件模型,事件运作流程如下:

  • 在程序中,实现事件监听器接口(实现接口中声明的所有抽象方法),向事件源注册事件监听器;

  • 程序运行过程中,用户在事件源上引发某种事件(执行某种操作)时,Java产生事件对象;

  • 事件源将事件对象传递给事件监听器;

  • 事件监听器根据事件对象的种类,调用相应的事件处理方法进行事件处理。


6程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.确定事件监听器

在编写事件处理的程序代码时,首先必须确定事件源与事件监听器。事件源的选择通常比较容易。事件监听器必须是实现事件监听器接口的类对象。


7程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.编写事件处理程序代码

在事件处理程序中,必须实现事件监听器接口中声明的事件处理方法。事件处理方法以事件对象作为参数。当事件源上发生事件时,产生的事件对象将以参数形式传递给事件处理方法。在事件处理方法中,可以访问事件对象的成员。


程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--处理按钮单击事件

创建一个窗口程序类,当用户单击窗口中的按钮时,将窗口的背景设置为红色。

import java.awt.*;

import java.awt.event.*;

class ButtEventApp extends Frame implements ActionListener

{

static ButtEventApp frm=new ButtEventApp();

public static void main(String args[])

{

frm.setTitle("ButtEventApp");

frm.setSize(300,160);

frm.setLayout(null);

Button btn;


btn=new Button("push");程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

btn.setBounds(120,80,60,30);

btn.addActionListener(frm);

frm.add(btn,BorderLayout.CENTER);

frm.setVisible(true);

}

public void actionPerformed (ActionEvent e)

{

frm.setBackground(Color.red);

}

}


程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--利用内部类处理按钮单击事件

内部类是在其它类的内部声明的类,包含内部类的类称为外部类,此时内部类成为外部类的成员,内部类具有成员的4种访问权限,也可以声明为static。

本例程序的功能与上例相同,程序代码不同之处是采用内部类对象作为事件监听器。

import java.awt.*;

import java.awt.event.*;

class InnClassEvent

{

static Frame frm=new Frame();


public static void main(String args[])程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

frm.setTitle("ButtEventApp");

frm.setSize(300,160);

frm.setLayout(null);

Button btn;

btn=new Button("push");

btn.setBounds(120,80,60,30);

btn.addActionListener(new InnCla());

frm.add(btn,BorderLayout.CENTER);

frm.setVisible(true);

}


static class InnCla implements ActionListener程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

public void actionPerformed(ActionEvent e)

{

frm.setBackground(Color.red);

}

}

}


11 3 2
11.3.2 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:事件类和监听器接口

1.事件类

Java定义的多数事件类在java.awt.event包中。AWTEvent类是所有事件类的祖先类,它又继承了java.util.EventObject类,而EventObject类又继承了java.lang.Object类


Java awt event
Java.awt.event程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:的继承关系图


2程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.事件监听器接口

Java中的每个事件类都有一个监听器接口,接口中声明了一个或多个抽象的事件处理方法。如果一个类实现事件监听器接口,其对象就可以作为对应事件的监听器,具备监视和处理事件的能力。


事件监听器接口和事件监听器接口中的方法程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:


AWT程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:中组件和可触发的事件类


3程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.事件适配器类

  • Java提供了一种简便办法,为包含多个事件处理方法的每个事件监听器接口提供了一个抽象类,称为适配器(adapt)类,类名带有Adapter标记。

  • 每个适配器类实现一个事件监听器接口,用空方法体实现该接口中的每个抽象方法。


例如,程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:WindowAdapter类实现WindowListener接口,用空方法体实现WindowListener接口中声明的以下方法:

windowClosing(WindowEvent e)

windowClosed(WindowEvent e)

windowOpened(WindowEvent e)

windowActivated(WindowEvent e)

windowDeactivated(WindowEvent e)

windowIconified(WindowEvent e)

windowDeiconified(WindowEvent e)


监听器接口与对应的适配器类程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:


4程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:.注册事件监听器的方法


11 3 3 actionevent
11.3.3 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:处理ActionEvent事件

当用户单击按钮(Button)、选择列表框(List)选项、选择菜单项(MenuItem),或是在文本行(TextField)输入文字并按下Enter键,便触发动作事件(ActionEvent),触发事件的组件将ActionEvent类的对象传递给事件监听器,事件监听器负责执行actionPerformed()方法进行相应的事件处理。


11 3 3 actionevent1
11.3.3 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:处理ActionEvent事件

ActionEvent类继承了EventObject类的一个常用的方法getSource(),其功能是返回事件源(对象)名。ActionEvent类本身还定义了一些成员,如getActionCommand(),其功能是返回事件源的字符串信息。


Actionevent
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--处理ActionEvent事件

编程实现:窗口中有标题为button1和button2的2个按钮和1个标签,当单击任一按钮时,标签显示该按钮的标题。

import java.awt.*;

import java.awt.event.*;

class ActEvent extends Frame implements ActionListener

{

static ActEvent frm=new ActEvent();

static Button btn1,btn2;

static Label lbl;


public static void main(String args[])程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

frm.setTitle("ActionEvent");

frm.setSize(240,160);

frm.setLayout(new FlowLayout());

btn1=new Button(" button 1 ");

btn2=new Button(" button 2 ");

lbl=new Label(" no clicking ");

btn1.addActionListener(frm);

btn2.addActionListener(frm);

frm.add(btn1);

frm.add(btn2);

frm.add(lbl);

frm.setVisible(true);

}


public void actionPerformed(ActionEvent e)程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

if(e.getSource()==btn1)

lbl.setText("button 1 clicked");

else

lbl.setText("button 2 clicked");

}

}


运行程序,出现如图所示的界面。程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

(a)初始界面(b)单击第1个按钮后的界面(c) 单击第2个按钮后的界面


11 3 4 itemevent
11.3.4 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:处理ItemEvent事件

当窗口中的选项组件Checkbox(选择框)和List(列表框)等被选择时,发生选项事件(item event)。

Java用ItemEvent类处理选项事件。ItemEvent类事件的监听器必须实现ItemListener接口,实现其中声明的itemStsteChanged()方法:

public void itemStateChanged(ItemEvent e)

程序运行过程中,当用户选择选项组件时,该方法被执行。


Itemevent
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--处理ItemEvent事件

编程实现:窗口中有标题为green和yellow的2个单选按钮和1个文本行,当选择任一单选按钮时,文本行中显示该单选按钮的标题。

import java.awt.*;

import java.awt.event.*;

class IteEvent extends Frame implements ItemListener

{

static IteEvent frm=new IteEvent();

static Checkbox chb1,chb2;

static TextField txt1;


public static void main(String args[])程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

frm.setTitle("ItemEvent");

frm.setSize(240,160);

frm.setLayout(new FlowLayout());

CheckboxGroup grp=new CheckboxGroup();

chb1=new Checkbox("green");

chb2=new Checkbox("yellow");

txt1=new TextField(" None is selected ");

chb1.setCheckboxGroup(grp);

chb2.setCheckboxGroup(grp);

chb1.addItemListener(frm);

chb2.addItemListener(frm);

frm.add(chb1); frm.add(chb2);

frm.add(txt1); frm.setVisible(true);

}


public void itemStateChanged(ItemEvent e)程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

if(e.getSource()==chb1)

txt1.setText("green is selected");

else

if (e.getSource()==chb2)

txt1.setText("yellow is selected");

}

}


运行程序,出现如图所示的界面。程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

(a)初始界面(b)单击green后的界面(c) 单击yellow后的界面


11 3 5 textevent
11.3.5 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:处理TextEvent事件

当TextField或TextArea组件中的文本改变时,触发文本事件(TextEvent),Java用TextEvent类处理该事件。

TextEvent类事件的监听器必须实现TextListener接口,实现其中声明的textValueChanged()方法:

public void textValueChanged(TextEvent e)

程序运行过程中,当TextField或TextArea组件中文本改变时,该方法被执行。


Textevent
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--处理TextEvent事件

编程实现:窗口中有2个文本行,当向上面的文本行输入文本时,下面文本行中同时显示所输入的文本。

import java.awt.*;

import java.awt.event.*;

class TexEvent extends Frame implements TextListener

{

static TexEvent frm=new TexEvent();

static TextField txt1,txt2;


public static void main(String args[])程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{ frm.setTitle("TextEvent");

frm.setSize(240,160);

frm.setLayout(new FlowLayout());

txt1=new TextField(20);

txt2=new TextField(20);

txt1.addTextListener(frm);

frm.add(txt1);

txt2.setEditable(false);

frm.add(txt1);

frm.add(txt2);

frm.setVisible(true);

}


public void textValueChanged(TextEvent e)程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

txt2.setText(txt1.getText());

}

}


(a)初始界面(b)在第1个文本行输入文本时的界面


11 3 6 keyevent
11.3.6 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:处理KeyEvent事件

当按下键盘中的任一键时,将触发键盘事件(key event), Java用KeyEvent类处理该事件。


Keyevent
KeyEvent程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:类的成员方法


Keylistener
KeyListener程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:接口的成员方法


Textevent1
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--处理TextEvent事件

编程实现:窗口中有1个文本行和1个文本区,当按下某字符时,在文本行中显示该字符;当键被按下事件发生时,在文本区显示被按下的字符;当键被释放事件发生时,在文本区显示被释放的字符;当键入字符事件发生时,在文本区显示被输入的字符。

import java.awt.*;

import java.awt.event.*;

public class KeysEvent extends Frame implements KeyListener

{ static KeysEvent frm=new KeysEvent();

static TextField txf;

static TextArea txa;


public static void main(String args[])程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

frm.setTitle("KeyEvent"); frm.setSize(240,200);

frm.setLayout(new FlowLayout());

txf=new TextField(20); txa=new TextArea(6,20);

txa.setEditable(false);

txf.addKeyListener(frm);

frm.add(txf); frm.add(txa);

frm.setVisible(true);

}


public void keyPressed(KeyEvent e)程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{ txa.setText("");

txa.append(e.getKeyChar()+" is pressed!\n");

}

public void keyReleased(KeyEvent e)

{ txa.append(e.getKeyChar()+" is released!\n"); }

public void keyTyped(KeyEvent e)

{ txa.append(e.getKeyChar()+" is typed!\n"); }

}


运行程序,出现如图所示的界面程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息::

(a)初始界面(b)在文本行输入字符r时的界面


Keyadapter textevent
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--利用KeyAdapter类处理TextEvent事件

编程实现:窗口中有2个文本行,当键入某字符时,在第1个文本行中显示该字符,并利用KeyAdapter类处理键入字符事件,在第1个文本行中显示“x is entered”,其中x表示被键入的字符。

import java.awt.*;

import java.awt.event.*;

public class KeysEvent2 extends Frame

{

static KeysEvent2 frm=new KeysEvent2();

static TextField txt1,txt2;


public static void main(String args[])程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

frm.setTitle("KeyEvent");

frm.setSize(240,130);

frm.setLayout(new FlowLayout());

txt1=new TextField(20); txt2=new TextField(20);

txt2.setEditable(false);

txt1.addKeyListener(new KeysAdapter());

frm.add(txt1);

frm.add(txt2);

frm.setVisible(true);

}


static class KeysAdapter extends KeyAdapter程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

public void keyTyped(KeyEvent e)

{

txt2.setText(e.getKeyChar()+" is entered!" );

}

}

}


(a)初始界面(b)在第1个文本行输入字符t时的界面


11 3 7 mouseevent
11.3.7 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:处理MouseEvent事件

当按下鼠标键、鼠标指针进入或离开某一区域,或者移动、拖动鼠标时,触发鼠标事件(mouse event)。Java用MouseEvent类处理该事件。


Mouseevent
MouseEvent程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:类中成员方法


Java程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:提供了MouseListener和MouseMotionListener接口,用来处理MouseEvent事件。MouseListener接口用来处理以下事件:

  • 鼠标指针进入某一区域

  • 按下鼠标键

  • 释放鼠标键

  • 鼠标单击(按下和释放鼠标键的整个过程)

  • 鼠标指针离开某一区域


Mouselistener
MouseListener程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:接口的成员方法


MouseMotionListener程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:接口用来处理以下2个事件:

  • 鼠标在某一区域移动

  • 鼠标在某一区域拖动(按下鼠标键不放移动鼠标)

    处理这2个事件的监听器必须实现MouseMotionListener接口


Mousemotionlistener
MouseMotionListener程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:接口的成员方法


Mouselistener mouseevent
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--利用MouseListener接口处理MouseEvent事件

编程实现:窗口中有2个文本区,当鼠标指针进入和离开第1个文本区时,在第2个文本区显示相应信息;当在第1个文本区单击鼠标、按下和释放鼠标键时,分别显示其事件及发生的位置信息。

import java.awt.*;

import java.awt.event.*;

public class MouEvent extends Frame implements MouseListener

{

static MouEvent frm=new MouEvent();

static TextArea txa1,txa2;


public static void main(String args[])程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

frm.setTitle("MouEvent"); frm.setSize(240,300);

frm.setLayout(new FlowLayout());

txa1=new TextArea(5,30);

txa2=new TextArea(8,30);

txa2.setEditable(false);

txa1.addMouseListener(frm);

frm.add(txa1); frm.add(txa2);

frm.setVisible(true);

}


public void mouseEntered(MouseEvent e) //程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:鼠标进入事件处理

{

txa2.setText("Mouse enters txa1\n");

}

public void mouseClicked(MouseEvent e) //鼠标单击事件处理

{

txa2.append("Mouse is

clisked at["+e.getX()+","+e.getY()+"]\n");

}

public void mousePressed(MouseEvent e) //鼠标按键事件处理

{

txa2.append("Mouse is pressed at ["+e.getX()+","+e.getY()+"]\n");

}


public void mouseReleased(MouseEvent e) //程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:鼠标键释放事件处理

{

txa2.append("Mouse is released at ["+e.getX()+","+e.getY()+"]\n");

}

public void mouseExited(MouseEvent e) //鼠标离开事件处理

{

txa2.append("Mouse exits from txa1 ");

}

}


运行程序,出现如图所示的界面。程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

(a)初始界面(b)发生MouseEvent事件后的界面


Mousemotion listener mouseevent
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--利用MouseMotionListener接口处理MouseEvent事件

编程实现:窗口中有1个文本区和2个文本行,当鼠标在文本区内移动时,在第1个文本行显示移动信息;当鼠标在文本区内拖动时,在第1个文本行显示拖动信息。

import java.awt.*;

import java.awt.event.*;

public class MouEvent2 extends Frame implements MouseMotionListener

{

static MouEvent2 frm=new MouEvent2();

static TextArea txa;

static TextField txt1,txt2;


public static void main(String args[])程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

frm.setTitle("MouEvent");

frm.setSize(240,200);

frm.setLayout(new FlowLayout());

txa=new TextArea(5,30);

txt1=new TextField(30);

txt2=new TextField(30);

txa.setEditable(false);

txa.addMouseMotionListener(frm);

frm.add(txa);

frm.add(txt1);

frm.add(txt2);

frm.setVisible(true);

}


public void mouseMoved(MouseEvent e) //程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:处理鼠标移动事件

{

txt1.setText("Mouse is moved in txa");

}

public void mouseDragged(MouseEvent e) //处理鼠标拖动事件

{

txt2.setText("Mouse is dragged in txa");

}

}


运行程序,出现如图所示的界面。程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

(a)初始界面(b)发生MouseEvent事件后的界面


Mousemotion adapter mouseevent
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--利用MouseMotionAdapter类处理MouseEvent事件,实现上例功能。

import java.awt.*;

import java.awt.event.*;

public class MouEvent3 extends Frame

{

static MouEvent2 frm=new MouEvent2();

static TextArea txa;

static TextField txt1,txt2;


public static void main(String args[])程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{ frm.setTitle("MouEvent");

frm.setSize(240,200);

frm.setLayout(new FlowLayout());

txa=new TextArea(5,30);

txt1=new TextField(30);

txt2=new TextField(30);

txa.setEditable(false);

txa.addMouseMotionListener(new MouMotionAdapter());

frm.add(txa);

frm.add(txt1);

frm.add(txt2);

frm.setVisible(true);

}


static class MouMotionAdapter extends MouseMotionAdapter程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{

public void mouseMoved(MouseEvent e) //处理鼠标移动事件

{ txt1.setText("Mouse is moved in txa"); }

public void mouseDragged(MouseEvent e) //处理鼠标拖动事件

{ txt2.setText("Mouse is dragged in txa"); }

}

}


11 3 8 windowevent
11.3.8 程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:处理WindowEvent事件

当创建窗口,将窗口缩小成图标,由图标转成正常大小,或关闭窗口时,触发窗口事件(window event)。Java用WindowEvent类处理该类事件,并提供了WindowListener接口, 用来监听该类事件。


Windowlistener
WindowListener程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:接口的成员方法


Windowevent
程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:--处理WindowEvent事件

编程实现:当窗口打开、关闭、缩小为图标和由图标转换成一般状态时,在屏幕上显示相应信息。

import java.awt.*;

import java.awt.event.*;

public class WinEvent extends Frame implements WindowListener

{

static WinEvent frm=new WinEvent();


public static void main(String args[])程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

{ frm.setTitle("MouEvent");

frm.setSize(240,200);

frm.addWindowListener(frm);

frm.setVisible(true);

}

public void windowClosing(WindowEvent e)

{ System.out.println("windowClosing() method");

System.exit(0); }

public void windowClosed(WindowEvent e)

{ }


public void windowActivated(WindowEvent e) { }程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:

public void windowDeactivated(WindowEvent e) { }

public void windowIconified(WindowEvent e)

{ System.out.println("windowIconified() method");

}

public void windowDeiconified(WindowEvent e)

{ System.out.println("windowDeiconified() method");

}

public void windowOpened(WindowEvent e)

{ System.out.println("windowOpened() method");

}

}


程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。


11.4 程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。绘图

Java提供了绘图类Graphics,用来在组件上绘图。通过调用Graphics的方法可以绘制直线、圆、圆弧、任意曲线等图形。


1 graphics
1程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。.Graphics类

Graphics类提供了很多绘图方法,绘图所使用的坐标系与屏幕、窗口相同。水平方向是X轴,向右为正,垂直方向是Y轴,向下为正,坐标源点(0, 0)位于屏幕的左上角。任一点(x, y)的x坐标表示该点距坐标源点在水平方向的像素,y表示距坐标源点在垂直方向的像素。


Graphics
Graphics程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。类的成员方法


2程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。.在组件上绘图

在java.awt.Component类中声明了绘图方法paint(),其声明如下:

public void paint(Graphics g)


2程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。.在组件上绘图

在paint()方法中,通过Graphics对象g调用绘图方法,在组件上绘制图形。paint()方法的执行方式与普通方法不同,它不是由用户编写代码调用执行,而是由系统自动执行。程序运行过程中,当创建一个组件时,系统自动执行该组件的paint()方法,绘制相应图形。因此,一个类如果需要在组件上绘图,则该类必须声明为继承某个Java组件类,并且覆盖paint()方法,否则不能自动执行paint()方法。


程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。--绘图举例

编程实现:在窗口中绘制1条直线和1个矩形,并在矩形内显示字符串“Painting”。

import javax.swing.*;

import java.awt.*;

public class Painting extends Frame

{

public Painting()

{ super("Painting");

setSize(200,150);

setVisible(true);

}


public static void main(String args[])程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。

{ Painting app=new Painting();

}

public void paint(Graphics g)

{ g.setColor(Color.red);

g.drawLine(50,50,150,50);

g.drawRect(50,70,100,50);

Font fnt=new Font("dialog", Font.ITALIC+Font.BOLD,15);

g.setFont(fnt);

g.drawString("Painting",70,100);

}

}


程序运行时,显示窗口如图所示程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。


ad