AWT事件处理

合集下载

Java-AWT事件处理

Java-AWT事件处理

2019/3/19
13
窗口事件处理



接口:WindowListener。 方法:打开执行windowOpened(),单击窗口右 上角关闭按钮执行windowClosing(),单击最小 化按钮执行windowIconified()和 windowDeactivated(),鼠标单击其他窗口也 会执行windowDeactivated(),由最小化恢复 会执行windowDeiconified()和 windowActivated(),当前窗口为其他窗口 时单击该窗口,也会执行windowActivated(), 窗口被关闭,则执行windowClosed(). 方法参数:WindowEvent e
2019/3/19
15
动作事件的处理(文本框)

}

ActionListener除了用于鼠标单击按钮外,单行文本框中的回车、列表框中双击 选择某个选项也可以用其处理。 import java.awt.*; import java.awt.event.*; class xx implements ActionListener{ TextField t=new TextField(“you can enter here”,35); t.addActionListener(this); //即单行文本框可以自动监听。 …………… public void actionPerformed(ActionPerformed e){ String s=t.getText(); System.out.println(s); } 注意:对于多行文本框TextArea,不能自动监听,可以添加按钮来实现检查和提 交功能。

按钮添加监听:button.addActionListener(事件处理器);

第7章_Java_awt 509修改 - 副本 (2)

第7章_Java_awt 509修改 - 副本 (2)

17
Frame类(框架)
Frame类是Container类的间接子类。当需要一个窗口时, 可使用Frame或其子类创建一个对象。窗口也是一个容器,
可以向窗口添加组件。窗口默认地被系统添加到显示器屏
幕上,因此,不允许将一个窗口添加到另一个容器中。 Frame是顶级窗口,可以显示标题,重置大小。当Frame 被关闭,将产生WindowEvent事件,Frame无法直接监听 键盘输入事件。
文字、图形、图象… 不能像标准组件一样被系统识别和承认,只起装饰作用。 不能响应用户的动作,不具有交互功能。
8
7.2 组件和容器
Java的图形用户界面的最基本组成部分是组件 (Component),组件是一个可以以图形化的方 式显示在屏幕上并能与用户进行交互的对象,例
如一个按钮,一个标签等。
给用户的技术。
目前Java主要提供了两个处理图形用户界面的类库: java.awt和javax.swing。
2
AWT:抽象窗口工具集(Abstract Windows Toolkit), 其外观取决于具体的平台,可用于Java的applet和 application。 java.awt包中包含了一个完整的类集以支持GUI程序的设 计(重量级构件),比如组件、图形等。
7 7
界面元素
容器是用来组织其他界面成分和元素的单元。
可以形成容器的层次,构筑复杂结构 Window(Frame、Applet、Dialog )
组件是图形用户界面的基本单位,它里面不再包含 其他的成分。
GUI组件是图形用户界面标准化的结果。 GUI组件的作用是完成与用户的交互。
用户自定义成分
Canvas Label TextField TextArea Scrollbar

java复习题带答案

java复习题带答案

一、选择题:1.运行Java程序需要的工具软件所在的目录是 A。

A.JDK的bin目录 B.JDK的demo目录C.JDK的lib目录 D.JDK的jre目录解析:运行Java的JDK一共包含五个目录,分别是:bin目录,该目录包含Java编译器、解释器和许多工具(如服务器工具、IDL、package工具等);lib目录,该目录包含Java 库文件jre目录,该目录是Java程序运行环境的根目录,它下面包含 bin子目录,包括平台所用工具和库的可执行文件以及DLL文件;demo目录,该目录包含源代码的程序示例;include目录,该目录包含Win32子目录,都是本地方法的文件。

因此,本题的正确答案是A。

2.下列关于Java语言特点的叙述中,错误的是 A 。

A.Java是面向过程的编程语言 B.Java支持分布式计算C.Java是跨平台的编程语言 D.Java支持多线程解析:Java是新一代编程语言,具有很多特点:简单易学;利用面向对象技术:分布式计算:健壮性(鲁棒性);安全性;跨平台(即体系结构中立):可移植性:解释执行;高性能;多线程;动态性。

因此,本题的正确答案是A。

3.Java的核心包中,提供编程应用的基本类的包是 A 。

A.ng B.java.util C.java.applet D.java.rmi解析:Java的核心包一共有12个,其中:ng包中封装了所有编程应用的基本类;java.util包提供实用程序类和集合类,如系统特性定义和使用、日期函数类、集合等常用工具;java.applet包为Applet提供执行需要的所有类,。

主要是访问Applet内容的通信类。

java.rmi包提供程序远程方法调用所需的类。

因此,本题的正确答案是A。

4.下列关于Java对import语句规定的叙述中,错误的是 C 。

A.在Java程序中import语句可以有多个B.在Java程序中import语句可以没有C.在Java程序中import语句必须有一个D.在Java程序中import语句引入在所有类定义之前解析:Java程序中使用import关键字导入一个包中的类。

Swing深入

Swing深入

AWT-SWT-Swing大比较之一:模型设计与实现总的来说Swing/AWT和SWT在事件处理机制上是类似的,窗口组件的树状结构也是类似的。

图形用户界面系统在事件处理设计上有两大类,一类是单线程模型,一类是多线程模型。

在事件处理机制上,三者都是遵循单线程规则。

单线程模型对于事件处理不保证线程安全性(Thread Safety),所有的事件处理都在Event Dispatch Thread(EDT)上进行,此一类事件模型通常叫做单线程模型。

这种模型规定所有对组件的访问操作必须在EDT上完成。

为什么对于组件的访问需要在EDT上完成?这主要是为了保证对于组件状态的改变是同步的,保证了界面组件的可确定性。

这中模型是大部分图形用户界面工具采用的模型,包括Swing/AWT、SWT、GTK、WinForm等等。

这种模型的好处是,结构设计和代码实现都比较简单,避免了为了实现线程同步的复杂处理。

但是也带来了一些问题,最常见的问题是,程序员容易将长时间复杂任务的处理放在事件处理函数完成,造成EDT线程被阻塞,给用户造成界面失去响应的错觉。

其实人们对于Swing速度慢和反映迟钝的感觉大部分来源于此,简单的说,是程序员的问题,而不是Swing自身的问题,是因为程序员没有理解这种事件处理机制造成的。

其实在SWT、GTK、WinForm等任何以这种事件模型为基础的工具都会出现。

重现的方法就是你简单的将长时间处理的任务放在事件处理函数中,你的用户界面就会失去响应。

如何解决这种问题?通用的办法就是采用异步线程处理长时间任务。

但是还要记住的是,在这种任务中对于界面的更新要采用SwingUtilities.invokeLater或者在SWT采用Synchroniz e方法,将访问操作放到EDT上进行。

关于如何写一个有效处理长时间任务的Swing程序,将会在其他文章中描述。

多线程模型中,所有的事件处理都是在异步线程中进行,界面组件同步访问的操作需要程序员来保证。

AWT事件处理模型

AWT事件处理模型
◇低级事件
ComponentEvent(组件事件:组件尺寸的变化,移动)
ContainerEvent(容器事件:组件增加,移动)
WindowEvent(窗口事件:关闭窗口,窗口闭合,图标化)
FocusEvent(焦点事件:焦点的获得和丢失)
KeyEvent(键盘事件:键按下、释放)
MouseEvent(鼠标事件:鼠标单击,移动)
ContainerEvent
容器中增加删除了组件
ContainerListener
componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
TextEvent
文本字段或文本区发生改变
TextListener
textValueChanged(TextEvent)
AWT事件处理模型
上一节中的主要内容是如何放置各种组件,使图形界面更加丰富多彩,但是还不能响应用户的任何操作,要能够让图形界面接收用户的操作,就必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及三类对象:
◇Event-事件,用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。
//窗口关闭时调用
public void windowActivated(WindowEvent e);
//窗口激活时调用
public void windowDeactivated(WindowEvent e);
//窗口非激活时调用
}
AWT的组件类中提供注册和注销监听器的方法:
◇注册监听器:
public void add<ListenerType> (<ListenerType>listener);

第13章事件处理(第4版)

第13章事件处理(第4版)

实现上述的接口,针对想要捕获的事件编写方法代码 。如要捕获单击按钮事件,就要为ActionListener接口 里的actionPerformed()方法编写代码。
为事件监听者创建一个对象,让自己的组件和方法完 成对它的注册,方法是在监听者接口的名字里加入一 个前缀“add”,如addActionListener()
待用户通过鼠标、键盘给它通知(消息驱动), 它再根据这个通知的内容进行相应的处理(事件 驱动)。 通常一个键盘或鼠标操作会引发一个系统预先定 义好的事件,用户只需编写代码,定义每个特定 事件发生时程序应做出何种响应即可。
3
13.1 委托事件处理
事件(event):用户使用鼠标或键盘对窗口中的组 件进行交互时所发生的事情。对这些事件做出响 应的程序,称为事件处理程序(Event Handler)。
见教材例13.5
20
13.6 文本组件及相应的事件处理
文本组件所触发的事件主要有动作事件 ActionEvent和文本变化事件CaretEvent 。 见教材例13.6
21
13.7 窗口组件及窗口事件处理
Window类的任何子类都可能触发下列的窗口事 件:打开窗口、正在关闭窗口、关闭窗口、激活窗 口、变成非活动窗口、最小化窗口和还原窗口。 Window类常用方法见教材表13.8
5
13.1 委托事件处理
Java语言规定:为了让监听者能对事件源发生的 事件进行处理,创建该监听者对象的类必须声明 实现相应的监听者接口或继承相应的适配类,即 必须在类体中具体定义该接口中所有方法的方法 体或覆盖适配器类中的相应方法,以供监听者自 动调用相应事件处理方法来完成对应事件的任务 ,这些处理事件的方法就是事件处理程序。
JCheckBoxMenuItem类的构造方法及常用方法 见教材表13.30、13.31。

Java第06章--1(AWT与Swing)

Java第06章--1(AWT与Swing)

• • 视图(view):它专门负责组件的绘制工作,主要涉及 paint()方法。MVC设计范式的最大优点是一个模型可以 有多个视图,每个视图是一个不同侧面但内容却是完整的。 • 一个模型的几个视图都是从不同侧面、用完整的内容来描 述同一个模型。当模型的控制器要修改其内容时,均会通 知这每个视图,它们都会自动地更新自己的视图显示。 • • 控制器(controller):专门负责管理和处理组件所接 收到的事件,这些事件可能来自用户的操作。如键盘输入、 鼠标点击和拖放等,也可能来自系统,如系统计时器发出 的事件。 • 视图和其控制器之间的通信不仅频繁且非常复杂,因此 JFC系统把两者封装成一个整体。
• • 模型(model):模型负责获取和管理组件的状态,用户若 需要询问组件的状态时,实际上是询问该组件的模型。 • 若要询问Swing型按钮组件(JButton 类的一个对象)的状 态,可调用JButton 类的父类javax.swing.AbstractButton所 提供的isSelected()方法,它定义为: – public boolean isSelected() { ... } – 该方法返回一个逻辑值,若为true则该按钮组件被压下,反 之返回false则按钮是松开状态。 • javax.swing包中的各种组件,对于描述该组件状态和内容的 模 型 都 是 用 以 Model 结 尾 的 接 口 实 现 , 例 如 , 对 于 按 钮 在 javax.swing包中有一个如下定义的接口: – public interface ButtonModel extends ItemSelectable { ... } • 每个JButton类的对象都保存着一个表示该按钮组件模型的对 象,调用其父类AbstractButton的方法就可以得到它,即: – JButton b = new JButton( "确定" );

AWT组件及事件处理(三)

AWT组件及事件处理(三)

public void actionPerformed(ActionEvent e) { if(e.getSource()==button1) { setBackground(Color.cyan); } else if(e.getSource()==button2) { setBackground(backColor); } } }
public void actionPerformed(ActionEvent e) {if(e.getSource() == tf) ta2.setText(tf.getText()); } public void textValueChanged(TextEvent e) {if(e.getSource() == ta1) ta2.setText(ta1.getText()); } }
CardLayout(卡片式布局)将每个组件看作一张 卡片,一个容器中可以加入多张卡片,但每次只 有一个可见。也称“多层页面设置”,它把每一 个组件都视为容器中的一层,每一个组件都会布 满整个容器。这些组件都会赋予一个名称,然后 再依这个名称来控制组件是否显示。 假设有一个容器con,使用CardLayout的一般步骤: 1、创建CardLayout布局对象 如:CardLayout card=new CardLayout(); 2、使用setLayout( )为容器设置布局 如:con.setLayout(card);
ScrollPane():创建滚动面板,滚动条初始不可见。
ScrollPane(int a) : 用指定的参数创建一个滚动 面板。a的取值为:
Scrollpane.SCROLLBARS-ALWAYS Scrollpane.SCROLLBARS-AS-NEEDED Scrollpane.SCROLLBARS-NEVER

Java面向对象程序设计案例教程课件:图形用户界面开发与事件处理

Java面向对象程序设计案例教程课件:图形用户界面开发与事件处理

《Java面向对象程序设计案例教程》
7.2 Swing基础
• Swing组件是Java语言提供的第二代GUI设计工 具包,它以AWT为基础,在AWT内容的基础上 新增或改进了一些GUI组件,使得GUI程序功能 更强大,设计更容易、更方便。
• Swing与AWT有以下不同。
• (1) Swing是完全用Java语言编写的,所以称 Swing组件是轻量级组件,没有本地代码,不依 赖操作系统的支持,比AWT构件具有更强的实 用性。Swing在不同的平台表现一致,并且有能 力提供本地窗口系统不支持的其他特性。
《Java面向对象程序设计案例教程》 • Swing的类层次结构如图所示:
《Java面向对象程序设计案例教程》
• 3. 简单的范例 • 一个简单的Swing GUI应用程序。该程序生成一个窗
口, • 窗口中有一个标签,用于显示输出。 • (1) 程序代码: • 1. import java.awt.* ; • 2. import javax.swing.* ; • 3. public class SwingDemo • 4. { • 5. public static void main(String args[]) • 6. { • 7. JFrame fm = new JFrame("第一个Windows程序") ; • 8. JLabel label = new JLabel("这是第一个GUI程序") ;
• 教材例题7-12 利用组合框显示、选取地名。
• 教材例题8.2 ,例题8.3用不同方法生成JFrame窗口
《Java面向对象程序设计案例教程》
• 7.3.2 面板容器JPanel
• 面板JPanel也是Java中常用到的容器之一,面板是一种透明 的容器,既没有标题,也没有边框,就像一块透明的玻璃。 与JFrame不同,它不能作为最外层的容器单独存在,它首 先必须作为一个构件放置到其他容器中,然后再把它作为容 器,把其他构件放到其中。

7.4+Java的事件处理

7.4+Java的事件处理

7.4.3 文本事件(TextEvent)的处理 文本事件(TextEvent)的处理
TextEvent类只包含一个事件,即代表文本区域中 类只包含一个事件, 类只包含一个事件 文本变化的事件TEXT-VALUE-CHANGED,在文 , 文本变化的事件 本区域中改变文本内容。例如,删除字符、 本区域中改变文本内容。例如,删除字符、键入 字符都将引发这个事件。这个事件比较简单,不 字符都将引发这个事件。这个事件比较简单, 需要特别判断事件类型的方法和常量。 需要特别判断事件类型的方法和常量。 Java中用于文本处理的基本组件有两种:单行文本 中用于文本处理的基本组件有两种: 中用于文本处理的基本组件有两种 框TextField和多行文本区域 和多行文本区域TextArea,它们都是 , TextComponent的子类。 的子类。 的子类
7.4.4 选择事件(ItemEvent)的处理 选择事件(ItemEvent)的处理
ItemEvent类只包含一个事件,即代表选择项的选 类只包含一个事件, 类只包含一个事件 中状态发生变化的事件ITEM-STATE-CHANGED。 。 中状态发生变化的事件 引发这类事件的动作包括: 引发这类事件的动作包括: (1) 改变列表类 改变列表类 列表类List对象选项的选中或不选中状态。 对象选项的选中或不选中状态 对象选项的选中或不选中状态。 (2) 改变下拉列表类 改变下拉列表类 下拉列表类Choice对象选项的选中或不选中 对象选项的选中或不选中 对象 状态。 状态。 复选按钮类Checkbox对象的选中或不选中状 对象的选中或不选中状 (3) 改变复选按钮类 改变复选按钮类 对象 态。 (4) 改变检测盒菜单项 改变检测盒菜单项CheckboxMenuItem对象的选 对象的选 中或不选中状态。 中或不选中状态。

java_swing面试题目(3篇)

java_swing面试题目(3篇)

第1篇一、Java Swing基本概念1. 什么是Java Swing?答:Java Swing是一种用于创建图形用户界面的库,它是Java语言的一个扩展,允许开发者创建具有丰富视觉效果的桌面应用程序。

2. Swing的组件有哪些?答:Swing组件包括基本组件(如按钮、标签、文本框等)、容器组件(如面板、窗口、滚动条等)、特殊组件(如树、表格等)。

3. Swing与AWT的区别是什么?答:Swing是基于Java的,而AWT是基于本地平台的。

Swing组件在不同平台上表现一致,而AWT组件在不同平台上可能有所不同。

Swing运行速度较慢,但提供了更多功能和更好的用户体验。

二、Swing基本组件1. 如何创建一个按钮,并设置其文本和字体?答:使用JButton类创建按钮,并设置其文本和字体。

```javaJButton button = new JButton("按钮");button.setFont(new Font("宋体", Font.PLAIN, 12));```2. 如何获取并设置文本框中的文本?答:使用JTextField类创建文本框,并通过getText()和setText()方法获取和设置文本。

```javaJTextField textField = new JTextField();String text = textField.getText(); // 获取文本textField.setText("新文本"); // 设置文本```3. 如何使用单选按钮(JRadioButton)实现多选?答:使用JRadioButton类创建单选按钮,并使用ButtonGroup类将它们分组。

```javaJRadioButton radioButton1 = new JRadioButton("选项1");JRadioButton radioButton2 = new JRadioButton("选项2");ButtonGroup buttonGroup = new ButtonGroup();buttonGroup.add(radioButton1);buttonGroup.add(radioButton2);```4. 如何使用复选框(JCheckBox)实现多选?答:使用JCheckBox类创建复选框,它们之间互不影响。

14、AWT事件模型

14、AWT事件模型
第十三讲
AWT事件模型 AWT事件模型
目标
了解委派事件模型DEM 了解委派事件模型DEM 掌握DEM的工作原理 掌握DEM的工作原理 掌握基本事件处理 掌握适配器类的使用 使用多个监听器
2
事件
如果用户在用户界面执行了一个动作,这 将导致一个事件的发生.事件是描述发生 了什么的对象.
3
事件处理模型
4
委派事件模型DEM 委派事件模型DEM
在Java1.1版中,事件处理机制被称为DEM Java1.1版中,事件处理机制被称为DEM (Delegation Event Model)----委派事件模型 Model)----委派事件模型 在DEM中,有3种对象:事件源对象,事件对象和事件 DEM中,有3 监听器对象 DEM的工作原理: DEM的工作原理: – 一个事件源是一个能够注册监听器对象并向它们发 送事件对象的对象 – 一个监听器对象是一个实现了专门的监听器接口的 类的实例,它使用事件对象中的信息来决定对事件 的反应. – 事件发生时,事件源会把事件对象发送给所有的注 册监听器
11
ContainerEvent TextEvent WindowEvent
事件监听器对象 2-1
事件监听器对象是当事件发生时被调用的对象, 监听器对象根据事件对象内封装的信息,决定如 何响应这个事件. 一个对象要成为事件监听器对象,必须实现事件 监听器接口 AWT库中所有的事件监听器接口都是 AWT库中所有的事件监听器接口都是 java.util.EventListener接口的子接口 java.util.EventListener接口的子接口 尽管Swing构件引入了很多的事件监听器接口, 尽管Swing构件引入了很多的事件监听器接口, 但是仍然广泛使用AWT所提供的各种事件接口进 但是仍然广泛使用AWT所提供的各种事件接口进 行事件处理

AWT 事件模型

AWT 事件模型

监听器接口列表 2-1
事件监听器 ActionListener AdjustmentListener ComponentListener actionPerformed adjustmentValueChanged componentResized componentMoved componentShown componentHidden componentAdded componentRemoved focusLost、focusGained itemStateChanged 方法
Scrollbar
Component Checkbox、 CheckboxMenuItem、 Choice、List Component
FocusEvent
AWT 事件类型 2-2
事件类
KeyEvent MouseEvent
说明
接收到键盘输入时会生成此事件。
事件源
Component
Component 拖动、移动、单击、按下或释放鼠 标或在鼠标进入或退出一个组件时, 会生成此事件。 将组件添加至容器或从中删除时会 生成此事件。 在文本区或文本域的文本改变时会 生成此事件 。 Container TextField、 TextArea
ContainerListener FocusListener ItemListener
监听器接口列表 2-2
事件监听器 KeyListener MouseListener 方法 keyPressed、keyReleased keyTyped mouseClicked、mouseEntered mouseExited、mousePressed mouseReleased mouseDragged、mouseMoved textChanged windowActivated、windowDeactivated windowClosed、windowClosing windowIconified、windowDeiconified windowOpened

java中awt的常用的用法

java中awt的常用的用法

一、概述awt的作用1.1 awt的全称1.2 awt的定位和作用1.3 awt的优点和局限二、awt常用的组件2.1 按钮(Button)2.2 标签(Label)2.3 文本框(TextField)2.4 文本区域(TextArea)2.5 列表(List)2.6 下拉列表(Choice)2.7 复选框(Checkbox)2.8 单选按钮(RadioButton) 2.9 滚动条(Scrollbar)2.10 对话框(Dialog)2.11 框架(Frame)三、awt的布局管理器3.1 FlowLayout3.2 BorderLayout3.3 GridLayout3.4 GridBagLayout3.5 CardLayout四、awt事件处理4.1 事件概述4.2 事件监听器4.3 事件对象4.4 事件的处理五、awt绘图5.1 绘图的基本概念5.2 绘图的步骤5.3 绘制图形5.4 绘制图像5.5 绘制文本六、awt的高级应用6.1 图形用户界面(GUI)开发 6.2 多媒体处理6.3 网络编程6.4 多线程处理七、awt的实际应用7.1 GUI程序开发7.2 窗口程序设计7.3 界面美化7.4 数据展示八、结语在Java编程中,awt(Abstract Window Toolkit)是一个用于创建图形用户界面(GUI)应用程序的基本工具包。

它提供了一系列的组件、布局管理器、事件处理和绘图功能,帮助开发者快速构建可视化的程序界面。

本文将从awt的基本组件、布局管理器、事件处理、绘图以及高级应用方面进行详细介绍。

一、概述awt的作用1.1 awt的全称awt的全称是Abstract Window Toolkit,它是Java的一个基本GUI 工具包,提供了一系列的类和方法供开发者创建、管理和展示图形用户界面。

1.2 awt的定位和作用awt的定位是作为Java的标准库,为开发者提供创建GUI界面的基本工具,充分利用面向对象的思想,让开发者能够通过简单的调用API来完成复杂的图形界面设计。

第5章 基于Swing的图形化用户界面_1布局管理器与事件处理 - 全

第5章 基于Swing的图形化用户界面_1布局管理器与事件处理  - 全
AWT ( 重量级组件)
通过 java.awt 包
创建 GUI
容器 组件 布局管理器
包含 AWT 容器组件
以图形表示的对象允许用户交互
AWT 包 含 内 容
定义 GUI 组件的位置
使用 AWT 图形方法相对于窗口绘制图形
图形和绘制方法
字体 事件
创建并构造用于选择新字体的对象 用于用户和系统交互
AWT类结构
框架JFrame


JFrame是放置其他Swing组件的顶级容器。
JFrame用于在Swing程序中创建顶层窗口。 默认情况下,框架的尺寸是没有实际意义的0X0像素。 为了设定合适的框架大小,要调用框架的setSize方法。

默认情况下,框架在创建时是不可见的。为了显示框架 ,要调用框架的setVisible方法。
AWTEvent Font Component ng.object Graphics MenuComponent 布局管理器类 Window Frame Container
Panel
Applet
Swing概述
通过 Swing (轻量级组件,纯Java组件) Javax.swing 包 创建 GUI

默认情况下,当用户关闭一个框架时,该框架会隐藏起
来,程序不会终止,调用setDefaultCloseOperation。
JFrame应用示例
创建具有以下特征的窗口: • 自定义窗口的标题; • 窗口的大小不可变(300,200); • 窗口居中显示。
标题
最大化按钮 失效
JFrame应用示例
import javax.swing.*; class App5_1 { public static void main(String[] args) { JFrame f=new JFrame("第一个Java窗口"); //创建容器 f.setSize(300,200); //设置容器大小 f.setLocationRelativeTo(null) ; //框架居中 f.setVisible(true); //设置框架可见性 f.setResizable(false); //设置不能改变框架大小 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }

scjp培训资料第九章javaawt事件模型

scjp培训资料第九章javaawt事件模型

s c j p培训资料第九章j a v a A W T事件模型(共9页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--第9章AWT事件模型本模块讨论了事件驱动的图形用户界面(GUI)的用户输入机制。

第一节相关问题讨论-以下为与本模块内容有关的问题:-哪些部分对于一个图形用户界面来说是必需的-一个图形化程序如何处理鼠标点击或者其他类型的用户交互第二节目标完成本模块之后,你应当能够:-编写代码来处理在图形用户界面中发生的事件-描述Adapter类的概念,包括如何和何时使用它们-根据事件对象的细节来确定产生事件的用户动作-为各种类型的事件创建合适的接口和事件处理器。

第三节什么是事件什么是事件-事件-描述发生了什么的对象-事件源-事件的产生器-事件处理器-接收事件、解释事件并处理用户交互的方法如果用户在用户界面层执行了一个动作(鼠标点击和按键),这将导致一个事件的发生。

事件是描述发生了什么的对象。

存在各种不同类型的事件类用来描述各种类型的用户交互。

事件源事件源是一个事件的产生者。

例如,在Button组件上点击鼠标会产生以这个Button 为源的一个ActionEvent. 这个ActionEvent实例是一个对象,它包含关于刚才所发生的那个事件的信息的对象。

这些信息包括:-getActionCommand-返回与动作相关联的命令名称。

-GetModifiers-返回在执行动作时持有的修饰符。

事件处理器事件处理器就是一个接收事件、解释事件并处理用户交互的方法。

第四节的事件模型与的事件模型比较的事件模型与的事件模型比较-层次模型(JDK-委托模型(JDK在中,事件接收和处理的方法发生了重要的改变。

本节将比较以前的事件模型和当前的事件模型和。

采用的是层次事件模型,而以及更高的版本采用的是委托事件模型。

层次模型层次模型是基于容器的。

事件先发送到组件,然后沿容器层次向上传播。

3ATWSwing事件处理

3ATWSwing事件处理

3ATWSwing事件处理AWT(AbtractWindowingToolkit)是用来创建Java图形用户界面的基本工具.JavaSwing是JFC(JavaFoundationClae)的一部分,它可以弥补AWT的一些不足.Container(容器):扩展组件的抽象基本类,例如Panel、Applet、Window、Dialog和Frame等是由Container演变的类,容器中可以包括多个组件。

LayoutManager(布局管理器):定义容器中组件的摆放位置和大小接口。

Java中定义了几种默认的布局管理器。

Graphic(图形):组件内与图形处理相关的类,每个组件都包含一个图形类的对象。

1组件",ColorgetForeground():获取组件的前景色。

",StringgetName():获取组件的名称。

",DimeniongetSize():以Dimenion对象的形式返回组件的大小。

",voidpaint(Graphicg):绘制该组件。

",voidrepaint():重绘组件。

",voidupdate(Graphicg):更新该组件。

",voidetViible(booleanb):根据参数的值显示或隐藏此组件。

",voidetSize(intwidth,intheight):调整组件的大小,使其宽度和高度分别为width和height。

",voidetName(Stringname):将组件的名称设置为指定的字符串。

",voidetForeground(Colorc):设置组件的前景色。

AWT的组件库画布(Canva)是处于屏幕上的一个空白矩形区域,在该区域可以绘图,也可以获得用户激发的事件。

画布组件可以监听鼠标事件和键盘事件。

publicvoidpaint(Graphicg)由于画布的paint()方法默认操作是清除画布,所以重写此方法的应用程序不需要调用uper.paint(g)。

AWT

AWT

AWT是api负责为Java程序建立的图形用户接口,AWT无疑使Java平台中最直观的部分之一。

AWT的基本思想是以面向对象的方法实现了一个跨平台GUI工具集,它提供了各种用于GUI设计的标准组件。

上面的图是AWT组件内容。

1.组件:组件是图形用户界面的,最小单位之一,它里面不再包含其它的成分。

一般的来说组件的作用是完成与用户的一次交互。

例如:接受用户的一个命令。

结束用户的一个文本输入、向用户显示文字或者是图片等等。

组件是图形用户界面标准化结果。

常见的组件有按钮、文本框、密码框等等。

2.容器:容器是用来组织其它界面成分和元素的单元。

一般说来一个应用程序的图形用户界面首先对应一个复杂的容器。

例如一个窗口。

这个容器的内部包含其他的内容。

如:按钮文本框、菜单等等。

也或者包含有其他的容器。

3.布局管理器:为了使生成的图形用户界面具有良好的平台无关性。

在Java语言当中提供了布局管理器这个功能,来管理组件在容器当中的布局。

而不是直接的设置位置和大小。

布局管理器就是一个指定其位置的工具,实现跨平台时仍然保持组件原来的布局。

Java当中所有和awt相关的类,都放在java.awt这个包中。

awt包是Java基本包中比较大的一个包。

在其中定义了GUIi的组件类以及其他用于构造图形用户界面的类。

如:字体类、绘图类等等。

上图描述了awt中的体系结构,采用从上倒下分层方式组织,所以理解和使用起来比较方便。

从这个体系结构我们可以看出,抽象类Component是所有除了菜单类组件之外AWT组件的父类。

他代表一个能以图形化方式显示出来,并且可以与用户交互的对象,例如:他的子类Button就代表按钮、TextArea就代表文本域、Container就代表容器。

从广义角度来讲,AwT是由各种容器组件构成。

如按钮、文本框等等小组件,窗口、框架等等大组件。

还有负责控制的布局管理器组件。

从刚才的AWT组件类层次中我们可以看出,容器类Container是Component的直接子类。

描述awt事件处理机制

描述awt事件处理机制

描述awt事件处理机制AWT(Abstract Window Toolkit)是Java的原始图形用户界面工具包,提供了一种供开发人员创建GUI应用程序的方法。

AWT事件处理机制允许开发人员对用户界面中的事件进行响应和处理。

AWT事件处理机制包括以下关键组件:1. 事件对象(Event objects):事件对象代表了用户界面中发生的事件,例如按钮点击、鼠标移动等。

每种类型的事件都有对应的事件对象。

2. 事件源(Event source):事件源是触发事件的组件,例如按钮、文本框等。

当事件发生时,事件源会创建一个事件对象并通过调用监听器的方法将事件对象传递给监听器。

3. 监听器(Listener):监听器是一个接口,定义了一种特定类型的事件处理方法。

开发人员可以为每种类型的事件创建一个监听器,并实现对应的事件处理方法。

4. 注册监听器(Registering listeners):开发人员需要将监听器注册到事件源上,以便在事件发生时能够接收到事件对象。

通常,通过调用事件源的`addXXXListener()`方法来注册监听器。

5. 事件分发器(Event dispatcher):事件分发器负责将事件对象传递给正确的监听器。

当事件发生时,事件源会将事件对象传递给事件分发器,然后事件分发器将根据事件类型寻找相应的监听器,并调用相应的事件处理方法。

6. 事件处理方法(Event handling methods):监听器的事件处理方法用于处理特定类型的事件。

开发人员需要实现这些方法以定义事件发生时的响应行为。

总结起来,AWT事件处理机制的基本流程如下:1. 开发人员创建一个或多个监听器,并实现相应的事件处理方法。

2. 开发人员将监听器注册到所需的事件源上,以便在事件发生时能够接收到事件对象。

3. 当事件发生时,事件源会创建一个事件对象,并将其传递给事件分发器。

4. 事件分发器根据事件类型寻找相应的监听器,并调用监听器的事件处理方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java AWT事件处理1 AWT事件处理基本概念AWT事件处理的过程中,主要涉及3类对象。

(1) Event(事件):用户对组件的一个操作,称之为一个事件,以类的形式出现,例如,键盘操作对应的事件类是KeyEvent。

其实例在改事件发生时有系统自动产生。

(2) Event Source(事件源):事件发生的场所,通常就是各个组件,例如按钮Button。

(3) Event Monitor(事件监听器):接收事件对象并对其进行处理的类的对象,通常其中某个成员方法对事件进行相应的处理。

事件委托处理模型图10-10 事件委托处理模型Java采取了事件委托处理模型(Delegation Model),事件源自己不处理事件,而是把在其自身所有可能发生的事件委托给事件监听器来处理。

比如,在Canvas对象上既可能发生鼠标事件,也可能发生键盘事件,该Canvas对象就可以委托给事件监听器1来处理鼠标事件,同时委托给事件监听器2来处理键盘事件。

委托模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。

2 事件事件分类。

按事件的性质分类java.util.EventObject类是所有事件对象的基础父类,所有事件都是由它派生出来的。

AWT的相关事件继承于java.awt.AWTEvent类,这些AWT事件分为两大类:低级事件和高级事件。

(1)低级事件低级事件是指基于组件和容器的事件,当一个组件上发生事件,如鼠标的进入、点击、拖放等,或组件的窗口开关等时,触发了组件事件。

—ComponentEvent(组件事件:组件尺寸的变化、移动);—ContainerEvent(容器事件:组件增加、移动);—WindowEvent(窗口事件:关闭窗口、窗口闭合、图标化);—FocusEvent(焦点事件:焦点的获得和丢失);—KeyEvent(键盘事件:键按下、释放);—MouseEvent(鼠标事件:鼠标单击、移动)。

(2)高级事件(语义事件)高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类。

比如,在TextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,选中项目列表的某一条就会触发ItemEvent事件。

—ActionEvent(动作事件:按钮按下,TextField中按Enter键);—AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值);—ItemEvent(项目事件:选择项目,不选择“项目改变”);—TextEvent(文本事件:文本对象改变)。

3 事件监听器3.1.事件监听器基本概念事件监听器通常是一个类,该类必须实现与该事件类型相对应的接口。

对应的接口被称为事件监听器接口。

事件监听器接口类的名称与事件类的名称相对应,例如,MouseEvent事件类的监听器接口名为MouseListener。

每类事件都有监听器是接口,根据动作来定义方法。

例如,与键盘事件KeyEvent相对应的接口是:public interface KeyListener extends EventListener{public void keyPressed(KeyEvent ev);public void keyReleased(KeyEvent ev);public void keyTyped(KeyEvent ev);}注意到在本接口中有3个方法,那么Java运行时系统什么时候调用哪个方法呢?其实根据这3个方法的方法名就能够知道应该是什么时候调用哪个方法执行了。

当键盘键刚按下去时,将调用keyPr essed()方法执行;当键盘键抬起来时,将调用keyReleased()方法执行;当键盘键敲击一次时,将调用k eyTyped()方法执行。

又例如,窗口事件接口:public interface WindowListener extends EventListener{public void windowClosing(WindowEvent e);处理发生在某个GUI组件上的XxxEvent事件的某种情况,其事件处理的通用编写流程如下:(1)编写一个实现了XxxListener接口的事件监听器类;(2)在XxxListener类中用于处理该事件情况的方法中,编写处理代码;(3)调用组件的addXxxListener方法,将类XxxListener创建的实例对象注册到GUI组件上。

(1)可以声明多个接口,接口之间用逗号隔开。

…implements MouseMotionListener, MouseListener, WindowListener;(2)可以由同一个对象监听一个事件源上发生的多种事件:f.addMouseMotionListener(this);f.addMouseListener(this);f.addWindowListener(this);则对象f上发生的多个事件都将被同一个监听器接收和处理。

(3)事件监听器和事件源处在同一个类中。

本例中事件源是Frame f,事件监听器是类ThreeLis tener,其中事件源Frame f是类ThreeListener的成员变量。

(4)可以通过事件对象获得详细资料,比如,本例中就通过事件对象获得了鼠标发生时的坐标值。

public void mouseDragged(MouseEvent e){String s="Mouse dragging :X="+e.getX()+"Y="+e.getY();tf.setText(s);}根据实现事件接口的方式不同可有如下4种方法:●内部类做监听器●匿名内部类做监听器●本类做监听器●其它类做监听器例1;/* 1. inner classimport java.awt.*;import java.awt.event.*;class MyEvent extends Frame{TextField t1,t2,t3;Button b1;Label c,m;MyEvent(){t1=new TextField("100",10);t2=new TextField("200",10);t3=new TextField(10);b1=new Button("计算");c=new Label("=");m=new Label("+");add(t1);add(m);add(t2);add(c);add(t3);add(b1);b1.addActionListener(new M());setLayout(new FlowLayout());setBounds(100,100,360,200);setVisible(true);}class M implements ActionListener{public void actionPerformed(ActionEvent e) {int a=Integer.parseInt(t1.getText());int b=Integer.parseInt(t2.getText());int c=a+b;t3.setText(String.valueOf(c));}}public static void main(String[] args){new MyEvent();}}*//* 2. nameless inner classimport java.awt.*;import java.awt.event.*;class MyEvent extends Frame{TextField t1,t2,t3;Button b1;Label c,m;MyEvent(){t1=new TextField("100",10);t2=new TextField("200",10);t3=new TextField(10);b1=new Button("计算");c=new Label("=");m=new Label("+");add(t1);add(m);add(t2);add(c);add(t3);add(b1);b1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){int a=Integer.parseInt(t1.getText());int b=Integer.parseInt(t2.getText());int c=a+b;t3.setText(String.valueOf(c));}});setLayout(new FlowLayout());setBounds(100,100,360,200);setVisible(true);}public static void main(String[] args){new MyEvent();}}*//* 3. this classimport java.awt.*;import java.awt.event.*;class MyEvent extends Frame implements ActionListener {TextField t1,t2,t3;Button b1;Label c,m;MyEvent(){t1=new TextField("100",10);t2=new TextField("200",10);t3=new TextField(10);b1=new Button("计算");c=new Label("=");m=new Label("+");add(t1);add(m);add(t2);add(c);add(t3);add(b1);b1.addActionListener(this);setLayout(new FlowLayout());setBounds(100,100,360,200);setVisible(true);}public void actionPerformed(ActionEvent e) {int a=Integer.parseInt(t1.getText());int b=Integer.parseInt(t2.getText());int c=a+b;t3.setText(String.valueOf(c)); }public static void main(String[] args) {new MyEvent();}}*//* ohter class 1import java.awt.*;import java.awt.event.*;class MyEvent extends Frame{TextField t1,t2,t3;Button b1;Label c,m;MyEvent(){t1=new TextField("100",10);t2=new TextField("200",10);t3=new TextField(10);b1=new Button("计算");c=new Label("=");m=new Label("+");add(t1);add(m);add(t2);add(c);add(t3);add(b1);b1.addActionListener(new M(this));setLayout(new FlowLayout());setBounds(100,100,360,200);setVisible(true);}public static void main(String[] args) {new MyEvent();}}class M implements ActionListener{MyEvent f1;M(MyEvent f){f1=f;}public void actionPerformed(ActionEvent e) {int a=Integer.parseInt(f1.t1.getText());int b=Integer.parseInt(f1.t2.getText());int c=a+b;f1.t3.setText(String.valueOf(c));}}*/// ohter class 2import java.awt.*;import java.awt.event.*;class MyEvent extends Frame{TextField t1,t2,t3;Button b1;Label c,m;MyEvent(){t1=new TextField("100",10);t2=new TextField("200",10);t3=new TextField(10);b1=new Button("计算");c=new Label("=");m=new Label("+");add(t1);add(m);add(t2);add(c);add(t3);add(b1);b1.addActionListener(new M(this));setLayout(new FlowLayout());setBounds(100,100,360,200);setVisible(true);}void cc(){int a=Integer.parseInt(t1.getText());int b=Integer.parseInt(t2.getText());int c=a+b;t3.setText(String.valueOf(c));}public static void main(String[] args){new MyEvent();}}class M implements ActionListener{MyEvent f1;M(MyEvent f){f1=f;}public void actionPerformed(ActionEvent e){();}}例2;/* inner classimport java.awt.*;import java.awt.event.*;class MyEvent{Frame f;Label c;void myint(){f=new Frame();c=new Label("鼠标单击点的坐标:");f.add(c);c.setBounds(20,50,300,20);f.setLayout(null);f.addMouseListener(new M());f.setBounds(100,100,350,200);f.setVisible(true);f.setFont(new Font("Arial",0,16));f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}class M implements MouseListener //extends MouseAdapter {public void mousePressed(MouseEvent e){int x=e.getX();int y=e.getY();c.setText("鼠标单击点的坐标:("+String.valueOf(x)+","+String.valueOf(y)+")");}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}public void actionPerformed(ActionEvent e){}}public static void main(String[] aa){MyEvent ff=new MyEvent();ff.myint();}}*//* nameless inner class as a monitorimport java.awt.*;import java.awt.event.*;class MyEvent{Frame f;Label c;void myint(){f=new Frame();c=new Label("鼠标单击点的坐标:");f.add(c);c.setBounds(20,50,300,20);f.setLayout(null);f.addMouseListener(new MouseListener(){public void mousePressed(MouseEvent e){int x=e.getX();int y=e.getY();c.setText("鼠标单击点的坐标:("+String.valueOf(x)+","+String.valueOf(y)+")");}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}public void actionPerformed(ActionEvent e){}});f.setBounds(100,100,350,200);f.setVisible(true);f.setFont(new Font("Arial",0,16));f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public static void main(String[] aa){MyEvent ff=new MyEvent();ff.myint();}}*//* this classimport java.awt.*;import java.awt.event.*;class MyEvent implements MouseListener{Frame f;Label c;void myint(){f=new Frame();c=new Label("鼠标单击点的坐标:");f.add(c);c.setBounds(20,50,300,20);f.setLayout(null);f.addMouseListener(this);f.setBounds(100,100,350,200);f.setVisible(true);f.setFont(new Font("Arial",0,16));f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public void mousePressed(MouseEvent e){int x=e.getX();int y=e.getY();c.setText("鼠标单击点的坐标:("+String.valueOf(x)+","+String.valueOf(y)+")");}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}public void actionPerformed(ActionEvent e){}public static void main(String[] aa){MyEvent ff=new MyEvent();ff.myint();}}*//* other class as a monitor 1import java.awt.*;import java.awt.event.*;class MyEvent{Frame f;Label c;void myint(){f=new Frame();c=new Label("鼠标单击点的坐标:");f.add(c);c.setBounds(20,50,300,20);f.setLayout(null);f.addMouseListener(new M(this));f.setBounds(100,100,350,200);f.setVisible(true);f.setFont(new Font("Arial",0,16));f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}public static void main(String[] aa){MyEvent ff=new MyEvent();ff.myint();}}class M implements MouseListener{MyEvent f1;M(MyEvent f){f1=f;}public void mousePressed(MouseEvent e){int x=e.getX();int y=e.getY();f1.c.setText("鼠标单击点的坐标:("+String.valueOf(x)+","+String.valueOf(y)+")");}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}public void actionPerformed(ActionEvent e){}}*/// other class as a monitor 2import java.awt.*;import java.awt.event.*;class MyEvent{Frame f;Label c;int x,y;void myint(){f=new Frame();c=new Label("鼠标单击点的坐标:");f.add(c);c.setBounds(20,50,300,20);f.setLayout(null);f.addMouseListener(new M(this));f.setBounds(100,100,350,200);f.setVisible(true);f.setFont(new Font("Arial",0,16));f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}void cc(){c.setText("鼠标单击点的坐标:("+String.valueOf(x)+","+String.valueOf(y)+")"); }public static void main(String[] aa){MyEvent ff=new MyEvent();ff.myint();}}class M implements MouseListener{MyEvent f1;M(MyEvent f){f1=f;}public void mousePressed(MouseEvent e){f1.x=e.getX();f1.y=e.getY();();}public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseClicked(MouseEvent e) {} public void actionPerformed(ActionEvent e){} }例3;import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import java.util.*;import javax.imageio.*;import java.awt.image.BufferedImage;class JavaChessFive extends Panel implements MouseListener,ActionListener{Socket chessSocket;DataInputStream inData;DataOutputStream outData;String host=null;int port=4331;Panel p;TextArea t1;myImage IMG;boolean s=true;int[][] chess=new int[15][15];JavaChessFive() throws Exception {t1=new TextArea();t1.setBounds(470,100,280,350);add(t1);IMG=new myImage();IMG.setBounds(478,5,290,78);add(IMG);p=new Panel();p.setBounds(30,465,720,80);p.setBackground(Color.WHITE);add(p);setLayout(null);setSize(785,600);setBackground(Color.ORANGE);addMouseListener(this);t1.append("大家好!\n");mm();}public void paint(Graphics g){for (int i=30;i<=450;i=i+30){g.drawLine(30,i,450,i);g.drawLine(i,30,i,450);}for(int k=30;k<=450;k+=30){g.drawString(String.valueOf(k/30),k-5,20);g.drawString(String.valueOf(k/30),10,k+5);}}public void chessPaint(int chessPoint_a,int chessPoint_b) throws Exception {black_nut bn=new black_nut();white_nut wn=new white_nut();if(s){this.add(bn);bn.setBounds(chessPoint_a*30-12,chessPoint_b*30-12,24,24);t1.append("黑方走棋位置:("+chessPoint_a+","+chessPoint_b+")\n");}else{this.add(wn);wn.setBounds(chessPoint_a*30-12,chessPoint_b*30-12,24,24);t1.append("白方走棋位置:("+chessPoint_a+","+chessPoint_b+")\n");}}public void mousePressed(MouseEvent e){if (e.getModifiers()==InputEvent.BUTTON1_MASK){int x=(int)e.getX();int y=(int)e.getY();int a=(x+15)/30;int b=(y+15)/30;while(a>0 && a<=15 && b>0 && b<=15 && chess[a-1][b-1]==0) {try{chessPaint(a,b); }catch(Exception ee){}if(s) chess[a-1][b-1]=10;else chess[a-1][b-1]=1;System.out.println("win_win "+win(a-1,b-1));if(win(a-1,b-1)==2){//removeAll();//ff.setVisible(true);System.out.println("恭喜,黑方胜!");t1.append("恭喜,黑方胜!\n");}else if(win(a-1,b-1)==1){System.out.println("恭喜,白方胜!");t1.append("恭喜,白方胜!\n");}//mm();s=!s;}}}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e) {}public void mouseExited(MouseEvent e) {}public void mouseClicked(MouseEvent e) {}public void actionPerformed(ActionEvent e){}void mm(){System.out.println("==============================================");for(int x=0;x<15;x++){for(int y=0;y<15;y++){System.out.print(chess[y][x]+" ");}System.out.println();}}int win(int x, int y){final int[][] cc={{0, 1},{ 1, 1},{ 1,0},{ 1,-1}};final int[][] dd={{0,-1},{-1,-1},{-1,0},{-1, 1}};int s,s1,s2,x1,y1;if(x>=0 && x<15 && y>=0 && y<15){for(int i=0;i<4;i++){s=chess[x][y];s1=chess[x][y];s2=chess[x][y];x1=x;y1=y;x1+=cc[i][0];y1+=cc[i][1];if((x1>=0) && (x1<15) && (y1>=0)&&(y1<15)){while(chess[x1][y1]==s ){s1+=chess[x1][y1];x1+=cc[i][0];y1+=cc[i][1];if(x1<0 || x1>14 || y1<0 || y1>14) break;}}x1=x;y1=y;x1+=dd[i][0];y1+=dd[i][1];if((x1>0) && (x1<15) && (y1>0)&&(y1<15)){while(chess[x1][y1]==s){s2+=chess[x1][y1];x1+=dd[i][0];y1+=dd[i][1];if(x1<0 || x1>14 || y1<0 || y1>14) break;}}System.out.println("s1+s2 :"+(s1+s2)+" "+s1+" "+s2);if((s1+s2)>=6 && (s1+s2)<=10) return 1;if((s1+s2)>=60) return 2;}return 0;}else{return 0;}}}class black_nut extends Canvas{ BufferedImage b;black_nut() throws Exception{b=ImageIO.read(new File("image/black.gif"));setSize(24,24);}public void paint(Graphics g){g.drawImage(b,0,0,null);}}class white_nut extends Canvas{ BufferedImage b;white_nut() throws Exception{b=ImageIO.read(new File("image/white.gif"));setSize(24,24);}public void paint(Graphics g){g.drawImage(b,0,0,null);}}class Test extends Frame{JavaChessFive p;Test(String s) throws Exceptionsuper(s);p=new JavaChessFive();setLayout(new BorderLayout());addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e) {System.exit(0);}});setBounds(100,100,785,600);add(p);setBackground(Color.WHITE);validate();setVisible(true);public static void main(String[] a) throws Exception {new Test("广州大学华软五子棋");}}class myImage extends Canvas{BufferedImage b;myImage() throws Exception{b=ImageIO.read(new File("image/pad11.jpg"));setSize(290,78);}public void paint(Graphics g){g.drawImage(b,0,0,null);}}4 适配器(Adapter)Java语言类的层次非常分明,它只支持单继承。

相关文档
最新文档