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
  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语言类的层次非常分明,它只支持单继承。

相关文档
最新文档