WindonEvent类对应WindonListener接口---即发生了XXXEvent类型的事件,那么处理该事件的接口为XXXListener);它们的父类为EventObject类。
5)事件编程的基本原则:
事件处理的类代码要对某一类事件加以处理,则应实现它们所对应的接口,并且给出该接口中定义的全部事件响应函数的功能实现(重写其函数体);然后在创建组件时注册该事件的监听器(响应者)。
6)事件注册:
事件源通过对特定的事件进行注册,以指定该事件的监听器(响应者)是谁。
7)事件注册函数:
函数名由“add + 事件类型对应的监听器接口名称”组成;函数参数为监听器对象(实现事件响应的类的对象,如容器组件自身响应该事件,则监听器对象应用this代表)。
8)事件编程步骤:
①实现某一事件的监听器接口(定义事件处理类并实现监听器接口)。 ②在事件处理类中重写(实现)其事件处理的函数体。
③在创建AWT组件时注册事件处理代码以指定该事件的监听器(响应者)是谁。 3.事件适配器
由于事件监听器接口是Abstract类型,意谓着实现该接口的类应全部实现其各个成员函数,但实际应用中可能只需处理某些事件响应代码;此时再采用实现事件监听器接口可能会导致编程复杂。JDK中提供事件适配器方式来实现事件编程。
1)每一种监听器接口有相应的适配器类,程序员只需让事件处理类从某一适配器类派出而不采用实现监听器接口的方式,这样仅需重写用户感兴趣的相应函数体代码。
2)在事件注册时,应将监听器设为适配器的派生类(子类)对象,该适配器类中事件响应函数将被执行。
13
实例3[4]:
事件触发实例:
//侦听器对象ButtonEventHandler(用来侦听按钮的点击操作) class ButtonEventHandler implements ActionListener { //窗体对象
private EventDemo form = null; //通过构造体传入窗体对象,
//作用在于让侦听器对象明白事件源处于 //哪个窗体容器中
public ButtonEventHandler(EventDemo form) { this.form = form; }
//委托方法
public void actionPerformed(ActionEvent e) { //该方法将会把事件的处理权交给窗体容器类的 //btnPress_Click方法处理。 this.form.btnPress_Click(e); } }
14
3.3 基于AWT及SWING的游戏界面开发
抽象窗口工具包AWT (Abstract Window Toolkit) 是API为Java程序提供的建立图形用户界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括: 用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。
AWT是Swing的基础。Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。AWT设计的初衷是支持开发小应用程序的简单用户界面。随着发展的需要,Swing出现了,Swing组件几乎都是轻量组件,与重量组件相比,没有本地的对等组件,不像重量组件要在它们自己的本地不透明窗体中绘制,轻量组件在它们的重量组件的窗口中绘制。Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级( light-weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。Swing采用了一种MVC的设计范式,即”模型-视图-控制”(Model-View-Controller),其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。Swing外观感觉采用可插入的外观感觉(Pluggable Look and Feel,PL&F)
实例4:[9]
Windows经典游戏扫雷GUI构造代码: package ly.Java.game;
import Java.awt.*; import Java.awt.event.*; import Javax.swing.*; import ly.Java.ExtendButton;
15
public class Game extends JFrame implements ActionListener{ private Container myContainer; private GridLayout myLayout;
ExtendButton[] myButton = new ExtendButton[81];
private Game() {
this.setTitle(“Game”); this.setSize( 500,500 ); this.InitButton(); }
private void InitButton() {
myContainer = getContentPane();
myLayout = new GridLayout( 9, 9, 1, 1 ); myContainer.setLayout( myLayout ); for(int i=0; i < 81; i++) {
myButton[i] = new ExtendButton(); myButton[i].SetPostion(i); myContainer.add(myButton[i]);
myButton[i].addActionListener( this ); }
System.gc(); this.SetBomb(13); show(); }
16
3.4 多线程技术的应用
线程简介[15]
进程就是程序的运行时的一个实例。线程可以看作单独地占有CPU时间来执行相应的代码的。对早期的计算机(如DOS)而言,线程既是进程,进程既是进程,因为它是单线程的。当然一个程序可以是多线程的,多线程的各个线程看上去像是并行地独自完成各自的工作,就像一台一台计算机上运行着多个处理机一样。在多处理机计算机上实现多线程时,它们确实可以并行工作,而且采用适当的分时策略可以大大提高程序运行的效率。但是二者还是有较大的不同的,线程是共享地址空间的,也就是说多线程可以同时读取相同的地址空间,并且利用这个空间进行交换数据。
将顺序执行程序和采用多线程并行执行程序相比,效率是可以大大地提高的。比如,有五个线程thread1, thread2, thread3, thread4, thread5,所耗的CPU时间分别为4,5,1,2,7。(假设CPU轮换周期为4个CPU时间,而且线程之间是彼此独立的)顺序执行需要花费19个CPU时间,而并行需要的时间肯定少于19个CPU时间,至于具体多少时间要看那些线程是可以同时执行的。这是在非常小规模的情况下,要是面对大规模的进程之间的交互的话,效率可以表现得更高。 Java实现多线程的过程
与其他语言不一样的是,线程的观念在Java是语言中是重要的,根深蒂固的,因为在Java语言中的线程系统是Java语言自建的, Java中有专门的支持多线程的API库。在使用Java创建线程的时候,你可以生成一个Thread类或者他的子类对象,并给这个对象发送start()消息(程序可以向任何一个派生自Runnable接口的类对象发送start() 消息的),这样一来程序会一直执行,直到run返回为止,此时该线程就死掉了。 在Java语言中,线程的特点:
1)在一个程序中而言,主线程的执行位置就是main。而其他线程执行的位置,程序员是可以自定义的。值得注意的是对Applet也是一样。 2)每个线程执行其代码的方式都是一次顺序执行的。
17
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库万鹏 2005911037 java技术在游戏开发的应用(4)在线全文阅读。
相关推荐: