当前位置:文档之家› JAVA第四讲

JAVA第四讲

第四部分图形界面设计:AWT u AWT概述

u事件处理模型

u布局管理模型

u AWT构件

4.1 AWT概述

u Abstract Window Toolkit u AWT软件包及其作用:

–为用户提供基本的界面构件;

–事件处理、剪贴板、数据传输、图象操作;

–2D API

u构件:AWT的基础

u构件、容器和布局管理器

4.1.1 AWT软件包

Java.awt

Java.awt.accessibility Java.awt.color Java.awt.datatransfer Java.awt.dnd

Java.awt.event Java.awt.font Java.awt.geom

Java.awt.im

Java.awt.image

Java.awt.peer

Java.awt.print

Java.awt.swing

Java.awt.test

Java.awt.peer

Java 程序Java AWT本地窗口系统

同位体

显示

一个Java程序创建并显示AWT构件,AWT构件创建并显示本地构件(同位体)。

4.1.2 AWT构件

u Component

Menu、Button、Label、List等构件的抽象基类。

u Container

可以包含多个构件的构件。

u LayoutManager

定义容器中构件位置和尺寸方法的接口。

u Graphics

定义构件内图形操作的基本类。每个构件都有一个相关的图形对象。

Component

Container

Window Panel

Frame

Dialog

Button Canvas CheckBox Choice Label List ScrollBar TextComponent

TextArea TextField ScrollPane

Applet

https://www.doczj.com/doc/1c14242661.html,ponent u图形对象

u位置

u尺寸

u本地同位体

u父容器

u字体和字体尺度

u前景和背景颜色

u地点场所

u最小值、最大值和首选尺寸

布局管理器u BorderLayout

u CardLayout

u FlowLayout

u GridLayout

u GridBagLayout 4.1.3 构件、容器和布局管理器

LayoutManager

Component

Container

1

n

小结

Component、Container、LayoutManager、Graphics:

u容器包含构件。

u布局管理器确定容器内构件的位置和形状。

u图形类提供在构件中显示文本框和图形的方法。

4.2 事件处理模型u GUI与事件驱动

u继承事件模型(旧)

u授权事件模型(新)

4.2.1 GUI与事件驱动u GUI

u事件驱动import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class MouseSensorApplet extends Applet {

public void init() {

setLayout(new BorderLayout());

add(new MouseSensorCanvas(), "Center");

}

}

class MouseSensorCanvas extends Canvas {

public boolean mouseDown(Event event, int x, int y) {

System.out.println(whichMouseButton(event) + ": Down");

return true;

}

public boolean mouseUp(Event event, int x, int y) {

System.out.println(whichMouseButton(event) + ": Up");

return true;

}

private String whichMouseButton(Event event) {……}

}

4.2.2 继承事件模型u什么是继承事件模型

构件:事件产生+事件处理

事件处理:继承+覆盖

u事件处理方法

u事件的传播

事件处理方法u自处理事件的处理

u被传播事件的处理

–构件内传播

–事件的向外传播

自处理事件的处理

常覆盖的构件方法:事件void setSize(int w,int h); 调整大小

void setBounds(int x,int y,int w,int h); 调整大小并/或移动void paint(Graphics g); 绘制构件

void update(Graphics g); 清除并重绘

void addNotify() 创建同位体

被传播事件的处理u什么是被传播事件

构件内传播,其它辅助方法处理

向构件外传播,超类或容器处理

u handleEvent(event)方法

import java.applet.Applet;

import java.awt.*;

public class CanvasEventExample

extends Applet {

public void init() {

MouseCanvas canvas = new MouseCanvas();

setLayout(new BorderLayout());

add(canvas, "Center");

}

}class MouseCanvas extends Canvas {

public boolean handleEvent(Event event) {

if(event.id== Event.MOUSE_DOWN) {

System.out.println("Mouse Down!");

return true;

}

//return super.handleEvent();

return false;

}

public boolean mouseUp(Eventevent, int x, int y) { System.out.println("Mouse Up!");

return true;

}

}

public boolean handleEvent(Event event) {

if(event.id== Event.MOUSE_DOWN) {

System.out.println("Mouse Down!");

return true;

}

return super.handleEvent();

//return false;

}

public boolean mouseUp(Eventevent, int x, int y) {

System.out.println("Mouse Up!");

return true;

//return super handleEvent();

//return super.mouseUp(,,);

}

}

u方法选择

1、继承并覆盖handleEvent()方法。

2、继承并覆盖action()、mouseXXXX()、

keyXXXX()、XXXXFocus()等辅助方法。

u传播方向

向构件所在容器传播,则handleEvent()方法返回FALSE;

不向构件所在容器传播,则handleEvent()方法返回TRUE;

由超类决定传播和处理,则handleEvent()方法返回super.handleEvent()

u没有完全处理的事件

如果使用的是handleEvent()方法,则返回super.handleEvent();

如果使用的是辅助方法,则返回辅助方法的超类实现。

被传播事件的辅助处理方法

boolean action() boolean mouseUp() Boolean mouseDown() boolean mouseDrag() boolean mouseMove() boolean mouseEnter() boolean mouseExit() boolean keyUp() boolean keyDown() boolean getFocus() boolean lost boolean()动作事件

释放鼠标

按下鼠标

拖动鼠标

移动鼠标

鼠标进入构件

鼠标离开构件

按键释放

按键被按下

构件得到焦点

构件失去焦点

继承事件模型的缺点

u事件的传播

–传送责任

–封装

u handleEvent()中的条件语句。

u UI逻辑与事件处理逻辑的混合。

4.2.3 授权事件模型

u事件模型中的三要素

构件(事件源)、事件、事件监听者u基本原理

u结构概述

u内部类的使用

u事件处理设计

1、基本原理

package eventnew_test ;import java.awt .*;

import java.awt.event .*;import java.applet .*;

public class Test extends Applet{

public void init(){

Button eventSource =new Button("Event Source");

eventSource.addActionListener ( new ButtonListener(this ));add(eventSource );}}

class ButtonListener

implements ActionListener {private Applet applet ;

public ButtonListener(Applet applet){this.applet = applet;}

public void actionPerformed(ActionEvent event){Button source =(Button)event.getSource ();

applet.showStatus(source.getLabel()+"activated ");}}

授权事件模型

事件源

事件监听者

事件

激发

注册

处理

Button.eventSource

new ButtonListener(this )

ActionEvent

激发

eventSource.addActionListener(new ButtonListener(this));

ButtonListener.actionPerformed

(ActionEvent event)

package eventnew_test;

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class Test

extends Applet{

public void init(){

Button eventSource=new Button("Event Source");

eventSource.addActionListener( new ButtonListener(this));

add(eventSource);

}

}class ButtonListener

implements ActionListener{

private Applet applet;

public ButtonListener(Applet applet){

this.applet= applet;

}

public void actionPerformed(ActionEvent event){ Button source =(Button)event.getSource();

applet.showStatus(source.getLabel()+"activated");

}

}

构件属性

行为

UI

事件处理布局管理

构件

属性

行为

UI

事件处理

布局管理器

构件

属性

行为

UI

事件监听者

事件处理

布局管理

2、结构概述

u事件源

u事件

u事件监听者

u适配器类

事件源

u构件

AWT构件提供监听者注册方法,允许某种类型的监听者注册感兴趣的事件。u多点传送事件源与单点传送事件源

AWT构件监听者注册方法

Button

CheckBox

CheckboxMenuItem

Choice

Component

Container

List

MenuItem

Scrollbar

TextArea

TextComponent

TextField

Window

void addActionListener(ActionListener)

void addItemListener(ItemListener)

void addComponentListener(

ComponetListener)

void addFocusListener(FocusListener)

void addInputmethodListener(

InputmethodListener)

void addKeyListener(KeyListener)

void addMouseListener(MouseListener)

void addMouseMotionListener(

MouseMotionListener)

void addContainerListener(ContainerListener)

void addAdjustmentListener(AdjustmentListener)

void addTextListener(TextListener)

void addWindowListener(WindowListener)

多点传送事件源与单点传送事件源u多点传送事件源

u单点传送事件源

事件

java.u t i l.

EventObject

AWTEvent

A c t i o n E v e n t Adjustment

Event

ComponnetEvent ItemEvent TextEvent

Container

Event

FocusEvent InputEvent P a i n t E v e n t WindowEvent

KeyEvent MouseEvent

构件事件和语义事件

u构件事件

ComponentEvent

ContainerEvent

FocusEvent

InputEvent

KeyEvent

MouseEvent

MouseMotionEvent

WindowEvent

u语义事件

由多个构件事件构成。

ActionEvent

AdjustmentEvent

ItemEvent

TextEvent

语义事件

改变文本

文本构件

TextEvent

切换复选框

选定菜单项

选定项目

选定项目

复选框

复选框菜单项

选择框

列表

IemEvent

移动滑动块

滚动条

AdjustmentEvent

激活按钮

双击按钮

选定项目

在域中回车

按钮、

列表、

菜单项

文本框

ActionEvent

激发条件

激发构件

语义事件

AWTEvent

u int getId()

u COMPONET_EVENT_MASK

FOCUS_EVENT_MASK

KEY_EVENT_MASK

MOUSE_EVENT_MASK

MOUSE_MOTION_EVENT_MASK

WINDOW_EVENT_MASK

ACTION_EVENT_MASK

ADJUSTMENT_EVENT_MASK

WindowEvent u Window getWindow()

u WINDOW_FIRST

WINDOW_LAST

WINDOW_ACTIVATED

WINDOW_DEACTIVATED

WINDOW_OPENED

WINDOW_CLOSING

WINDOW_CLOSED

WINDOW_ICONIFIED

WINDOW_DEiCONIFIED

事件监听者

EventListener

Action Listener Adjustment - Listener Component - Listener Focus- LIstener Container- Listener ItemListener

KeyListener

TextListener

Mouse Listener Mouse MotionListener

Window Listener

事件监听者与事件

u ActionEvent

u AdjustmentEvent u ComponentEvent u

ContainerEvent u FocusEvent u InputEvent u ItemEvent u KeyEvent u

MouseEvent u TextEvent

u

WindowEvent ()

u ActionListener

u AdjustmentListener u ComponentListenr u ContainerListener u FocusListener

u InputMethodListener u ItemListener u KeyListener u MouseListener

u MouseMotionListener u TextListener u

WindowListener

ActionListener

u actionPerformed(ActionEvent )u ACTION_EVENT/action()

WindowEvent & WindowListener

u

Window getWindow ()

u

WINDOW_FIRST WINDOW_LAST

WINDOW_ACTIVATED WINDOW_DEACTIVATED WINDOW_OPENED WINDOW_CLOSING WINDOW_CLOSED WINDOW_ICONIFIED WINDOW_DEICONIFIED

WindowListener 接口中的方法:

void windowActivated(WindowEvent )void windowDeactivated(WindowEvent )void windowOpened(WindowEvent )void windowclosed(WindowEvent )void windowClosing(WindowEvent )void windowIconified(WindowEvent )void windowEdiconified(WindowEvent )

适配器类

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class ButtonTest

extends Applet {

public void init(){

Button button= new

Button("Press Me");

button.addMouseListener(

new ButtonMouseListener());

add(button);

}

}class ButtonMouseListener

implements MouseListener{

public void mouseEntered(MouseEvent event){

System.out.println("Mouse Entered Button"); }

public void mouseExited(MouseEvent event){

System.out.println("Mouse Exited Button");

}

public void mousePressed(MouseEvent event){} public void mouseClicked(MouseEvent event){} public void mouseReleased(MouseEvent event){} }

class ButtonMouseListener

implements MouseListener{

public void mouseEntered(MouseEvent event){

System.out.println("Mouse Entered Button"); }

public void mouseExited(MouseEvent event){

System.out.println("Mouse Exited Button");

}

public void mousePressed(MouseEvent event){} public void mouseClicked(MouseEvent event){} public void mouseReleased(MouseEvent event){} }

如果使用适配器类

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class ButtonTest2 extends

Applet {

public void init(){

Button button= new

Button("Press Me");

button.addMouseListener(

new ButtonMouseListener2());

add(button);

}

}

class ButtonMouseListener2

extends MouseAdapter{

public void mouseEntered(MouseEvent

event){

System.out.println(

"Mouse Entered Button");

}

public void mouseExited(

MouseEvent event){

System.out.println(

"Mouse Exited Button");

}

}

class ButtonMouseListener2

extends MouseAdapter{

public void mouseEntered(MouseEvent event){ System.out.println("Mouse Entered Button"); }

public void mouseExited(MouseEvent event){ System.out.println("Mouse Exited Button"); }

}class ButtonMouseListener

implements MouseListener{

public void mouseEntered(MouseEvent

event){

System.out.println("Mouse Entered Button");

}

public void mouseExited(MouseEvent event){

System.out.println("Mouse Exited Button");

}

public void mousePressed(

MouseEvent event) {}

public void mouseClicked(MouseEvent event)

{}

public void mouseReleased(

MouseEvent event) {}

}

class ButtonMouseListener2

extends MouseAdapter{

public void mouseEntered(MouseEvent event){

System.out.println("Mouse Entered Button");

}

public void mouseExited(MouseEvent event){

System.out.println("Mouse Exited Button");

}

}

AWT适配器类

Adapter ComponentAdapter ContainerAdapter FocusAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter Listener Interface

ComponentListener

ContainerListener

FocusListener

KeyListener

MouseListener

MouseMotionListener

WindowListener

3、内部类的使用

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class ButtonTest2 extends

Applet {

public void init(){

Button button= new

Button("Press Me");

button.addMouseListener(

new ButtonMouseListener2());

add(button);

}

}

class ButtonMouseListener2

extends MouseAdapter{

public void mouseEntered(MouseEvent

event){

System.out.println(

"Mouse Entered Button");

}

public void mouseExited(

MouseEvent event){

System.out.println(

"Mouse Exited Button");

}

}

import java.awt.*;

import java.awt.event.*;

import java.applet.*;

public class ButtonTest2

extends Applet {

Button button= new

Button("Press Me");

public void init(){

button.addMouseListener(

new ButtonMouseListener2());

add(button);

}class ButtonMouseListener2

extends MouseAdapter{

public void mouseEntered(MouseEvent event)

{

System.out.println("Mouse Entered Button");

}

public void mouseExited(MouseEvent event)

{

System.out.println("Mouse Exited Button");

}

}

}

public void init(){

button.addMouseListener( new MouseAdapter(){

public void mouseEntered(MouseEvent event) {

System.out.println("Mouse Entered Button");

}

public void mouseExited(MouseEvent event) {

System.out.println("Mouse Exited Button");

}

});

add(button);

}

使用匿名内部类

4.3 布局管理器u布局管理器的基本概念

u标准AWT布局管理器

BorderLayout

FlowLayout

CardLayout

GridLayout

GridBagLayout

4.3.1 基本概念

Component

Container

ScrollPane Panel Window

java.applet.

Applet

Dialog Frame

Layout

Manager

Menu-

Container

Layout

Manager2

1、标准AWT布局管理器

u BorderLayout

u FlowLayout

u CardLayout

u GridLayout

u GridBagLayout

Container默认布局管理器

BorderLyout

Frame

BorderLayout

Dialog

BorderLayout Window

FlowLayout

Panel &Applet

null

Container

默认的布局管理器容器类

两种类型的布局管理器u不带约束条件的布局管理器

LayoutManager

u带约束条件的布局管理器

LayoutManager2

2、布局管理器接口LayoutManager:

void addLayoutComponent(String name,Component comp);

void removeLayoutComponent(String name,Component comp);

Dimension preferredLayoutSize(Container parent);

Dimension minimumLayoutSize(Container parent);

void LayoutContainer(Container parent);

布局管理器接口

LayoutManager2:

void addLayoutComponnet(Componnet c, Object constraints);Dimension maximumLayoutSize(Container );

float getLayoutAlignmentx(Container parent);float getLayoutAlignmenty(Container parent);void invalidateLayout(Container parent);

标准AWT 布局管理器实现的接口

LayoutManager FlowLayout

无LayoutManager GridLayout 规定网格约束条件LayoutManager2GridBagLayout 字符串规定名字LayoutManager2CardLayout 字符串规定方位LayoutManager2BorderLayout 构件的约束条件

实现的接口布局管理器

3、布局管理器和构件的首选尺寸

//Component methods

public Dimension getPreferredSize (); public Dimension getMinimumSize ();

//LayoutManager methods

Dimension preferredLayoutSize(Container );Dimension minimumLayoutSize(Container );

布局管理器和首选尺寸

根据构件的GridBagConstraints 变化。

GridBagLayout

忽略首选高度和宽度。

GridLayout 忽略首选高度和宽度。CardLayout 如果构件没有被显式地设置大小,则保留首选高度和宽度。

FlowLayout NORTH & SOUTH:保留高度,忽略宽度EAST & WEST :保留宽度,忽略高度CENTER :忽略首选高度和宽度

BorderLayout

保留构件首选尺寸的策略

布局管理器

4、布局管理器和容器空白区

left

bottom right

top

容器构件class TenPixelBorder

extends Panel {

public TenPixelBorder(Component borderMe) {

setLayout(new BorderLayout());

add(borderMe, "Center");

}

public void paint(Graphics g) {

Dimension mySize=getSize();

Insets myInsets= getInsets();

g.setColor(Color.gray);

g.fillRect(0,0,mySize.width, myInsets.top);

g.fillRect(0,0,myInsets.left, mySize.height);

g.fillRect(mySize.width-myInsets.right, 0, myInsets.right,mySize.height);

g.fillRect(0, mySize.height-myInsets.bottom, mySize.width, mySize.height); }

public Insets getInsets() {

return new Insets(10,10,10,10);

}

}

4.3.2 标准AWT布局管理器

u BorderLayout u CardLayout

u FlowLayout

u GridLayout

u GridBagLayout

1、BorderLayout

public class BorderLayoutApplet extends Applet {

private Button north, south, east, west, center;

public void init() {

Panel buttonPanel = new Panel();

TenPixelBorder border = new TenPixelBorder(buttonPanel );

north = new Button("north ");east = new Button("east ");west = new Button("west ");center = new Button("center ");south = new Button("south ");

buttonPanel.setLayout(new BorderLayout(2,2));buttonPanel.add(north , "North");buttonPanel.add(south,"South ");buttonPanel.add(east , "East");buttonPanel.add(west , "West");buttonPanel.add(center,"Center ");setLayout(new BorderLayout ());add(border , "Center");

}

}

2、CardLayout

public class CardLayoutApplet extends Applet {private Button tiny, small, med, lrg ;private Panel cardPanel = new Panel(),

tinyPanel = new Panel(),smallPanel = new Panel(),MediumPanel = new Panel(),LargePanel = new Panel();private CardLayout card = new CardLayout(10,5);public void init(){……}

class ButtonListener implements ActionListener {public void actionPerformed(ActionEvent event){card.next(cardPanel );}}}

public void init(){

……

cardPanel.setLayout(card);

……

cardPanel.add(“tiny”,tinyPanel);

cardPanel.add(“small”,smallPanel);

cardPanel.add(“med”,MediumPanel);

cardPanel.add(“lrg”,LargePanel);

……

}

3、FlowLayout

public class FlowLayoutApplet extends Applet { public void init() {

Button one = new Button(" 1 "),

……

six = new Button(" 6 ");

Panel panel= new Panel();

TenPixelBorder border = new TenPixelBorder(panel);

panel.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 5));

panel.add(one);

……

panel.add(six);

setLayout(new BorderLayout());

add(border, "Center");

}

}

4 GridLayout

相关主题
文本预览
相关文档 最新文档