Java语言6响应用户输入.ppt
《Java语言6响应用户输入.ppt》由会员分享,可在线阅读,更多相关《Java语言6响应用户输入.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java语言程序设计语言程序设计资源与环境科学学院资源与环境科学学院第六章第六章 响应用户输入响应用户输入一个简单的界面程序一个简单的界面程序import java.awt.*;import java.awt.*;public class TestFrame public class TestFrame public static void main(String args)public static void main(String args)Frame f=new Frame(My Frame Programming!);Frame f=new Frame(My Frame Program
2、ming!);f.add(new Button(ok);f.add(new Button(ok);f.setSize(300,300);f.setSize(300,300);f.setVisible(true);f.setVisible(true);/f.dispose();/f.dispose();/释放窗口,加上这句后窗口闪下消失释放窗口,加上这句后窗口闪下消失 此时点击此时点击button或者点击关闭窗口都没或者点击关闭窗口都没有响应,只有最大化,最小化有响应。有响应,只有最大化,最小化有响应。AWT事件处理机制事件处理机制 三个重要的概念三个重要的概念事件:用户对组件的一个操作,称之为
3、一个事件事件:用户对组件的一个操作,称之为一个事件事件源:发生事件的组件就是事件源。事件源:发生事件的组件就是事件源。事件处理器:某个事件处理器:某个JavaJava类中的负责处理事件的成员方法。类中的负责处理事件的成员方法。事件,事件源,事件处理器之间的关系事件,事件源,事件处理器之间的关系事件分类事件分类 按产生事件的物理操作和按产生事件的物理操作和GUIGUI组件的表现效果分类组件的表现效果分类MouseEventMouseEventWindowEventWindowEventActionEventActionEvent 按事件的性质分类:按事件的性质分类:低级事件低级事件语义事件(又叫
4、高级事件)语义事件(又叫高级事件)在中列出多种事件,如果事件的监听器中有多个方法,则在中列出多种事件,如果事件的监听器中有多个方法,则为低级事件,如果只有一个方法就为语义事件。为低级事件,如果只有一个方法就为语义事件。事件监听器事件监听器 一个事件监听器对像一个事件监听器对像负责处理一类事件负责处理一类事件。一类事件的每一种发生情况,分别一类事件的每一种发生情况,分别由事件监听器由事件监听器对象中的一个方法来对象中的一个方法来具体处理具体处理。在事件源和事件监听器对象中进行约定的接口类,在事件源和事件监听器对象中进行约定的接口类,被称为被称为事件监听器接口事件监听器接口。书书P193 事件监听
5、器事件监听器接口类的名称接口类的名称与与事件类的名称事件类的名称通常是通常是相对应相对应的。例如的。例如MouseEventMouseEvent事件类的监听器接口名事件类的监听器接口名为为MouseListenerMouseListener。创建事件监听器类创建事件监听器类import;/myWindowListener.java/myWindowListener.java文件文件import java.awt.event.*;public class myWindowListener implements WindowListenerpublic void windowOpened(Wind
6、owEvent e)public void windowClosing(WindowEvent e)e.getWindow().setVisible(false);(Window)e.getComponent().dispose();System.exit(0);public void windowActivated(WindowEvent e)public void windowClosed(WindowEvent e)public void windowDeactivated(WindowEvent e)public void windowDeiconified(WindowEvent e
7、)public void windowIconified(WindowEvent e)添加事件监听器添加事件监听器import java.awt.*;/打开上例中的打开上例中的TestFrame.java程序程序public class TestFrame public static void main(String args)Frame f=new Frame(My Frame Programming!);f.add(new Button(ok);f.setSize(300,300);f.setVisible(true);f.addWindowListener(new myWindowLis
8、tener();运行后可以顺利的关闭窗口运行后可以顺利的关闭窗口事件监听器编写流程事件监听器编写流程 处理发生在某个处理发生在某个GUIGUI组件上的组件上的*EventEvent事件的某种事件的某种情况,其事件处理的通用编写流程。情况,其事件处理的通用编写流程。编写一个实现了编写一个实现了*ListenerListener接口的事件监听器类;接口的事件监听器类;*ListenerListener类中的用于处理该事件情况的方法中,类中的用于处理该事件情况的方法中,编写处理代码;编写处理代码;调用组件的调用组件的add*Listeneradd*Listener方法,将类方法,将类 *Listen
9、erListener创建的实例对象注册到创建的实例对象注册到GUIGUI组件上。组件上。事件适配器事件适配器 JDKJDK中也提供了大多数事件监听器中也提供了大多数事件监听器接口接口的的最简单的最简单的实现类实现类,称之为,称之为事件适配器事件适配器(Adapter)Adapter)类类。用事件适配器来处理事件,可以用事件适配器来处理事件,可以简化事件监听器简化事件监听器编写编写。在在AWTAWT中就经常用到声明和实现多个接口。无论实现了几个接中就经常用到声明和实现多个接口。无论实现了几个接口,接口中已定义的方法必须一一实现,如果对某事件不感口,接口中已定义的方法必须一一实现,如果对某事件不感
10、兴趣,可以不具体实现其方法,而用空的方法体来代替,但兴趣,可以不具体实现其方法,而用空的方法体来代替,但却必须所有方法都要写上。这样一来会有一些不便,为了解却必须所有方法都要写上。这样一来会有一些不便,为了解决这个问题,决这个问题,AWTAWT使用了适配器(使用了适配器(AdapterAdapter),),JavaJava语言为一语言为一些些ListenerListener接口提供了适配器类(接口提供了适配器类(AdapterAdapter)。)。可以通过继可以通过继承事件所对应的承事件所对应的AdapterAdapter类,重写所需要的方法,无关的方类,重写所需要的方法,无关的方法则不用实现
11、。法则不用实现。事件适配器事件适配器/编写一个采用适配器的编写一个采用适配器的YourWindowListener.javaYourWindowListener.java类类importimport java.awt.event.WindowAdapter;java.awt.event.WindowAdapter;importimport java.awt.event.*;java.awt.event.*;public public classclass YourWindowListenerYourWindowListener extendsextends WindowAdapterWindo
12、wAdapter public void public void windowClosingwindowClosing(WindowEvent e)(WindowEvent e)e.getWindow().dispose();e.getWindow().dispose();System.exit(0);System.exit(0);事件适配器事件适配器import java.awt.*;public class TestFrame public static void main(String args)Frame f=new Frame(My Frame Programming!);f.add
13、(new Button(ok);f.setSize(300,300);f.setVisible(true);/f.addWindowListener(new myWindowListener();f.addWindowListener(new YourWindowListener();事件适配器事件适配器 事件适配器类的不足之处:事件适配器类的不足之处:JavaJava不允许一个类继承多个类,因此当一个类已经不允许一个类继承多个类,因此当一个类已经继承了别的类,就不能再使用事件适配器类,此时继承了别的类,就不能再使用事件适配器类,此时只能使用事件监听器接口。只能使用事件监听器接口。如果如果*L
14、istenerListener接口中只有一个方法,可以采用事接口中只有一个方法,可以采用事件监听器,没有必要使用事件适配器。因此对于件监听器,没有必要使用事件适配器。因此对于*ListenerListener接口中只有一个方法,是没有事件适配接口中只有一个方法,是没有事件适配器类的。器类的。在事件监听器中访问非事件源在事件监听器中访问非事件源的其他的其他GUI组件组件import java.awt.*;import java.awt.event.*;/为为button按钮添加关闭窗口的事件按钮添加关闭窗口的事件public class TestFrame implements ActionLi
15、stener public static void main(String args)Frame f=new Frame(My Frame Programming!);f.add(new Button(ok);f.setSize(300,300);f.setVisible(true);f.addWindowListener(new YourWindowListener();public void actionPerformed(ActionEvent e)书书P194 f.dispose()System.exit(0);判断是否正确?判断是否正确?此函数中此函数中 f 在哪里在哪里定义?定义?
16、Btn是否关是否关联事件?联事件?在事件监听器中访问非事件源在事件监听器中访问非事件源的其他的其他GUI组件组件import java.awt.*;import java.awt.event.*;/为为button按钮添加关闭窗口的事件按钮添加关闭窗口的事件public class TestFrame implements ActionListener Frame f=new Frame(My Frame Programming!);public static void main(String args)TestFrame tf=new TestFrame();Button btn=new B
17、utton(ok);tf.f.add(btn);tf.f.setSize(300,300);tf.f.setVisible(true);tf.f.addWindowListener(new YourWindowListener();btn.addActionListener(tf);public void actionPerformed(ActionEvent e)f.dispose()System.exit(0);注意:该写法结构注意:该写法结构不太好,可以改写不太好,可以改写内部类内部类 实现事件处理实现事件处理 内部类(内部类(Inner ClassInner Class)是被定义于另一
18、个类中的类,是被定义于另一个类中的类,使用内部类的主要原因是由于:使用内部类的主要原因是由于:一个内部类的对象可访问外部类的成员方法和变量,一个内部类的对象可访问外部类的成员方法和变量,包括私有的成员;包括私有的成员;实现事件监听器时,采用内部类、匿名类编程非常容实现事件监听器时,采用内部类、匿名类编程非常容易实现其功能;编写事件驱动程序,内部类很方便。易实现其功能;编写事件驱动程序,内部类很方便。内部类所能够应用的地方往往是在内部类所能够应用的地方往往是在AWTAWT的事件处理机的事件处理机制中。制中。在事件监听器中访问非事件源在事件监听器中访问非事件源的其他的其他GUI组件组件import
19、 java.awt.*;import java.awt.event.*;/为为button按钮添加关闭窗口的事件按钮添加关闭窗口的事件public class TestFrame Frame f=new Frame(My Frame Programming!);public static void main(String args)TestFrame tf=new TestFrame();tf.init();public void init()Button btn=new Button(ok);btn.addActionListener(new ActionListener()public v
20、oid actionPerformed(ActionEvent e)f.dispose();System.exit(0););f.add(btn);f.setSize(300,300);f.setVisible(true);f.addWindowListener(new YourWindowListener();事件处理事件处理 一个组件上的一个组件上的一个动作可以产生多种不同类型一个动作可以产生多种不同类型的的事件。事件。一个事件监听器对象一个事件监听器对象可以注册到可以注册到多个事件源上多个事件源上。在在一个事件源上一个事件源上也可以注册对同一类事件进行处也可以注册对同一类事件进行处理的理
21、的多个事件监听器对象多个事件监听器对象。GUI组件的图形操作组件的图形操作Graphics类与图形绘制类与图形绘制 Component.getGraphicsComponent.getGraphics方法,将返回方法,将返回GraphicsGraphics类对类对象。象。Graphics.drawLine(int x1,int y1,int x2,int y2)Graphics.drawLine(int x1,int y1,int x2,int y2)方法。方法。Graphics.drawString(String str,int x,int y)Graphics.drawString(Str
22、ing str,int x,int y)方法。方法。注意:注意:drawStringdrawString方法的坐标参数中方法的坐标参数中(x,y)x,y)为为文本的左下角文本的左下角。编程举例:编程举例:以鼠标在窗口中按下时的位置作为起始点,鼠标释放以鼠标在窗口中按下时的位置作为起始点,鼠标释放时的位置作为终止点,在鼠标释放时将直线画出,并在每条直时的位置作为终止点,在鼠标释放时将直线画出,并在每条直线的起始和终止点位置上打印出它们的坐标值。线的起始和终止点位置上打印出它们的坐标值。Graphics类与图形绘制类与图形绘制 鼠标事件,任何组件都可以激发这些事件。鼠标事件,任何组件都可以激发这些
23、事件。类通过接口类通过接口 MouseListener 来实现,也可以通过来实现,也可以通过适配器适配器 MouseAdapter()类来实现。类来实现。按下鼠标事件按下鼠标事件 mousePressed(MouseEvent e);mousePressed(MouseEvent e);释放鼠标事件释放鼠标事件 mouseReleased(MouseEvent e);mouseReleased(MouseEvent e);其他方法参见其他方法参见 p200 Graphics类与图形绘制类与图形绘制import java.awt.*;import java.awt.event.*;public
24、class DrawLine Frame f=new Frame(“绘图工具绘图工具”);/指定绘图工具的画面指定绘图工具的画面public static void main(String args)new DrawLine().init();public void init()f.setSize(300,300);f.setVisible(true);f.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)e.getWindow().dispose();/添加窗口关闭事件添加窗口关闭事件 S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 语言 响应 用户 输入
限制150内