图形用户界面设计2事件模型ppt课件_第1页
图形用户界面设计2事件模型ppt课件_第2页
图形用户界面设计2事件模型ppt课件_第3页
图形用户界面设计2事件模型ppt课件_第4页
图形用户界面设计2事件模型ppt课件_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AWT事件模型事件模型ContentsContents1. AWT事件处置模型2.事件处置的实现 为学生信息管理管理系统设计一个登陆界面,接受用户输入的账号和密码。界面如下图: 所需求的知识点 常用组件和容器的运用方法及功能 AWT事件处置模型例例AWTAWT事件模型事件模型 设计一个图形界面,不仅仅需求画出窗口并添加组件,更重要的是为组件设计相应程序,使组件可以呼应并处置用户的操作,例如单击按钮,等等 当Java程序运转时,假设用户在界面上进展某种操作,系统捕获这些操作会引发相应的事件Event,然后执行相应的事件处置程序。 Java中定义了许多事件类,用来描画不同的用户行为事件与事件处置事

2、件与事件处置事件,就是发生在用户界面上的用户交互行为而产生的事件,就是发生在用户界面上的用户交互行为而产生的一种效果,如鼠标的各种动作、键盘的操作以及发生在组一种效果,如鼠标的各种动作、键盘的操作以及发生在组件上的各种动作。件上的各种动作。每发生一个事件,程序都需求作出相应的呼应,这称为每发生一个事件,程序都需求作出相应的呼应,这称为事件处置。事件处置。AWTAWT事件模型事件模型 事件的来源 事件的来源是用户的操作 每当用户在AWT组件上进展某种操作,例如用鼠标单击按钮,敲击键盘等,AWT事件处置系统会生成一个相应的事件对象 事件对象描画的是用户所执行的操作,用户操作不同,事件对象的内容也会

3、不同。AWTAWT事件模型事件模型 事件的处置 事件的处置由事件处置程序完成 每个AWT组件都有本人的事件处置程序 当事件对象生成时,AWT事件处置系统就会将这个事件对象传送给所涉及的组件,由它们的事件处置程序进展相应处置AWTAWT事件模型事件模型 事件的模型 事件处置模型,是指事件产生后事件对象的传送模型 JDK 1.0 运用的是层次模型(hierarchal) JDK 1.1 运用的是委托模型(delegation)层次模型JDK 1.0运用的层次事件处置模型主要基于容器和组件的包含关系一个事件对象产生之后,首先被传送给直接相关的组件,该组件可以对事件进展处置,也可以忽略。假设组件没有对

4、事件进展处置,那么AWT事件处置系统会将事件对象继续向上传送给组件所在的容器假设容器将事件忽略,那么AWT事件处置系统会将事件再继续向上传送给容器所在的容器层次模型 例如:例如: Frame Panel事件事件 层次事件处置模型中的事件都用层次事件处置模型中的事件都用Event描画,描画,Event是是java.awt中定义的一个类,中定义的一个类,它有如下几个成员变量:它有如下几个成员变量:Object target事件涉及的组件事件涉及的组件long when事件发生的时间事件发生的时间int id事件的类型事件的类型int x, y事件产生的坐标位置事件产生的坐标位置Object arg

5、与详细事件有关的参数与详细事件有关的参数事件类型包括:事件类型包括:窗口事件挪动窗口、封锁窗口等窗口事件挪动窗口、封锁窗口等鼠标事件挪动鼠标、按下鼠标键等鼠标事件挪动鼠标、按下鼠标键等焦点事件获得焦点、失去焦点焦点事件获得焦点、失去焦点键盘事件按下或松开键键盘事件按下或松开键ACTION事件按动按钮等事件按动按钮等列表框事件在列表框中进展选择列表框事件在列表框中进展选择滚动条事件按动其中的向上或向下按钮滚动条事件按动其中的向上或向下按钮为了区分事件类型,需求用其事件分类标为了区分事件类型,需求用其事件分类标志变量志变量id来判别事件能否属于动作事件:来判别事件能否属于动作事件:if( Ev.i

6、d = ACTION_EVENT )层次模型 例如:例如: Frame Panel事件事件生成生成Event的的一个实例一个实例组件都承继了组件都承继了Component类中的类中的handleEvent()方法,方法,handleEvent根据事件的类型调用不同的方法,根据事件的类型调用不同的方法,假设对事件进展了处置,就前往假设对事件进展了处置,就前往true,否那么前往,否那么前往falsepublic boolean handleEvent (Event evt) switch (evt.id) case Event.MOUSE_ENTER:return mouseEnter (evt

7、, evt.x, evt.y);case Event.LOST_FOCUS:return lostFocus (evt, evt.x, evt.y);return false;public boolean mouseEnter (Event evt, int x, int y)return false;层次模型import java.awt.*;public class Main extends Frame Label statusBar = new Label ( );public static void main (String args)new Main ();Main () super

8、 (Example);add (South, statusBar); resize ( 200, 200);show ( ) ; 层次模型public class Main extends Frame public boolean handleEvent (Event evt) switch (evt.id)case Event.MOUSE_MOVE: return mouseMove (evt, evt.x, evt.y);case Event.MOUSE_DRAG: return mouseDrag (evt, evt.x, evt.y);case Event.WINDOW_DESTROY

9、: hide();dispose (); System.exit(0); return true; return super.handleEvent(evt);层次模型public class Main extends Frame public boolean mouseMove(Event evt,int x,int y) String status = (+evt.x+,+evt.y+); if (evt.controlDown() status += C; if (evt.shiftDown() status += S; statusBar. setText (status); retu

10、rn true; public boolean mouseDrag(Event evt,int x,int y) String status = (+evt.x+,+evt.y+); if (evt.controlDown() status += C; if (evt.shiftDown() status += S; statusBar. setText (status); return true; 层次模型层次事件处置的优点有:简单、容易了解,基于面向对象的原理层次事件处置的缺陷有:事件对象只能被引起该事件的组件或包含它的容器捕获,而其他组件无法处置该事件没有简单的事件过滤方法,要进展事件处

11、置,需求创建某个组件的子类,否那么就必需为最外层的容器编写复杂的handleEvent()及与之相关的方法在在JDK1.1中,事件处置模型将事件源产惹事件的组件和对中,事件处置模型将事件源产惹事件的组件和对事件作出的详细处置利用一种称为监听器事件作出的详细处置利用一种称为监听器Listener的实体来的实体来对事件进展详细的处置分开。对事件进展详细的处置分开。 普通情况下,组件事件源都不处置本人的事件,而是将事普通情况下,组件事件源都不处置本人的事件,而是将事件处置委托给外部的处置实体监听器,这种事件处置模型称件处置委托给外部的处置实体监听器,这种事件处置模型称为事件的授权处置模型。不同的事件

12、,可以交由不同类型的监听为事件的授权处置模型。不同的事件,可以交由不同类型的监听器去处置。器去处置。 委托模型 一切的组件都从一切的组件都从Component类中承继了将事件处置授权类中承继了将事件处置授权给监听器的方法:给监听器的方法: addXXXListener(ListenerType listener) removeXXXListener(ListenerType listener)n用户操作引发的事件对象依然传送给相应组件,组用户操作引发的事件对象依然传送给相应组件,组件注册一个事件处置程序,这种事件处置程序称为件注册一个事件处置程序,这种事件处置程序称为事件的监听程序事件的监听程

13、序(Listener)(Listener)。委托模型委托模型JDK 1.1运用的委托事件处置模型的根本思想是用户操作引发的事件依然传送给相应的组件为了接纳事件对象并进展事件处置,组件必需注册一个事件处置程序事件监听程序Listener。事件监听程序可以定义在组件所在的类中,也可以定义在其他类中。对事件的处置,由组件委托给事件监听程序所在的类来完成。 事件的监听程序可以定义在组件所在的类中,也可以定义在其他的类里; 而对事件的处置,那么由组件委托给事件监听程序所在的类来完成。委托模型 在委托事件处置模型下,事件对象只被传送给曾经注册的监听程序。 根据用户操作的不同,事件也被分成不同类型。 每种事

14、件都有一个对应的监听程序类,这个监听程序类应实现了相应的监听程序接口Listener interface,并且定义了事件对象的接纳和处置方法。委托模型委托模型 在委托事件处置模型中,Java根据不同的用户操作,产生不同的事件类(Event),如窗口事件类(Window Event)、单击事件类(ActionEvent)等,并为每个事件类定义了事件监听程序(Listener) 这些事件监听程序的声明在对应的监听程序接口中,例如WindowListener、ActionListener等。委托模型 例如: Frame Panel事件事件Button1.addActionListener(this)

15、/为按钮Button1注册了ActionEvent事件监听程序系统捕获操作,并产生系统捕获操作,并产生ActionEvent事件事件public void actionPerformed (ActionEvent e)/ActionListener接口中的Action事件处置程序按钮委托的事件监听按钮委托的事件监听程序类对象程序类对象AWTAWT事件处置模型事件处置模型 在事件处置的过程中,主要涉及三类对象: Event-事件:用户对界面操作在java言语上的描画,以类的方式出现,例如键盘操作对应的事件类是KeyEvent。 Event Source-事件源:事件发生的场所,通常就是各个组件,

16、例如按钮Button。 Event handler-事件处置者:接纳事件对象并对其进展处置的对象。AWTAWT事件处置模型事件处置模型事件处置事件用户对界面操作,以类的方式出现事件源事件发生的场所,通常就是各个组件事件处置者接纳事件并对其进展处置的对象EventEvent SourceEvent handler事件源、事件、事件处置者之间的关系组件组件(事件源事件源)事件事件对象对象事件处置器事件处置器4321外部作用外部作用生成事件对象生成事件对象事件监听器注册事件监听器注册把事件对象传把事件对象传入事件处置器入事件处置器授权处置机制 不同的事件源上能够发生不同的事件:例如一个按钮可以发生A

17、ctionEvent类型的事件,而一个窗口可以发生WindowEvent类型的事件 同一个事件源上能够发生多种事件:例如在Canvas对象上既能够发生鼠标事件,也能够发生键盘事件 java采取授权处置机制(Delegation Model):事件源可以把在其本身一切能够发生的事件分别授权给不同的事件处置者来处置。授权处置机制 授权模型把事件的处置委托给外部的处置实体进展处置,实现了将事件源和监听器分开的机制。事件处置者监听器事件处置者监听器通常是一个类,担任处置一类事件该类假设要可以处置某种类型的事件,就必需实现与该事件类型相对应的接口。例如下例中类ButtonHandler之所以可以处置Ac

18、tionEvent事件,缘由在于它实现了与ActionEvent事件对应的接口ActionListener。每个事件类都有一个与之相对应的接口。事件处置举例import javax.swing.*;import java.awt.*;import java.awt.event.*;public class TestButton public static void main(String args) JFrame f = new JFrame(Test);JButton b = new JButton(Press Me!);b.addActionListener(new ButtonHandl

19、er();f.setLayout(new FlowLayout(); f.add(b);f.setSize(200, 100);f.setVisible(true); Button 是事件源是事件源class ButtonHandler implements ActionListener public void actionPerformed(ActionEvent e) System.out.println(Action occurred);事件事件 事件处置者事件处置者事件处置的实现步骤 对于某种类型的事件XXXEvent, 要想接纳并处置这类事件,必需定义相应的事件监听器类,该类需求实现

20、与该事件相对应的接口XXXListener。 进展授权,注册该类事件的监听器,运用addXXXListener(XXXListener ) 方法来注册监听器。b.addActionListener(new ButtonHandler();思索:可不可以用一思索:可不可以用一个类本身实现监听器个类本身实现监听器? ?第二节第二节 委托模型委托模型import java.awt.*;import java.awt.event.*;public class TestButton public static void main (String args)Frame f = new Frame (Tes

21、t);Button b = new Button (Press me);b.addActionListener(new ButtonHandler();f.add(Center, b);f.pack(); f.setVisible(true); 第二节第二节 委托模型委托模型import java.awt.*;import java.awt.event.*;public class TestButton public static void main (String args) b.addActionListener(new ButtonHandler();class ButtonHandle

22、r implements ActionListener public void actionPerformed (ActionEvent e) System.out.println(Action occurred);输出为:第二节第二节 委托模型委托模型import java.awt.*;import java.awt.event.*;public class TestButton implements ActionListener public static void main (String args) (new TestButton().go();public void go () b.

23、addActionListener(this);public void actionPerformed (ActionEvent e) System.out.println(Action occurred);委托模型AWTEvent事件类Java在java.awt.event包中定义了许多事件类,用来处置各种用户操作所产生的事件,它们的父类都是java.awt包中的AWTEvent类。Java中的每个事件类都有一个对应的接口,接口中声明了一个或多个笼统的事件处置方法,凡是需求接纳并处置事件对象的类,多需求实现相应的接口 EventObjectEventObject类的主要方法类的主要方法 pu

24、blic Object getSource() /public Object getSource() /获获得产惹事件的组件得产惹事件的组件 ActionEventActionEvent类的主要方法类的主要方法 public String public String getActionCommand() /getActionCommand() /获得按钮获得按钮的标签的标签委托模型委托模型 java.awt.event包中的每个事件类都有一个对应的接口,接口中声明了一个或多个笼统的事件处置方法,如ActionListener中的actionPerFormed()方法。假设要接纳处置某一个事件类

25、,必需实现相应的接口。事件类接口方法说明ActionEvent单击事件类ActionListeneractionPerformed(ActionEvent e)单击按钮,文本行中单击回车键,双击列表框选择菜单项KeyEvent KeyListenerkeyPressedkeyReleasedkeyTyped键盘输入FocusEventFocusListenerfocusGainedfocusLost组件得到或失去焦点 第二节第二节 委托模型委托模型import java.awt.*;import java.awt.event.*;public class cal Frame f;Button

26、b1, b2, badd,bequl;TextField text;Panel p;public static void main (String args )(new cal().display();第二节第二节 委托模型委托模型public class cal public void display() f = new Frame (calculator);text = new TextField ( );f. add (text, North); p = new Panel ();b1 = new Button (1);b2 = new Button (2);badd = new But

27、ton (+);bequl = new Button (=);p. add ( b1 );p. add ( b2 );第二节第二节 委托模型委托模型public class cal public void display() p. add ( badd ); p. add ( bequl );f.add(p);f.setSize(300, 200);f.setLocation ( 300, 300);f.setVisible ( true ); 输出为:第二节第二节 委托模型委托模型import java.awt.*;import java.awt.event.*;public class c

28、al implements ActionListener public void display() b1. addActionListener (this);b2. addActionListener (this);badd. addActionListener (this);bequl. addActionListener (this);第二节第二节 委托模型委托模型import java.awt.*;import java.awt.event.*;public class cal implements ActionListener public void actionPerformed(

29、ActionEvent e)if (e.getSource () = b1) text.setText ( text.getText() + e.getActionCommand();委托模型 为了进展事件处置,需求创建实现Listener接口的类 在某些Listener接口中,声明了很多笼统方法,为了实现这些接口,需求一一实现这些方法。委托模型例如:在WindowListener接口中,声明了:windowClosing(WindowEvent e)windowClosed(WindowEvent e)windowOpened(WindowEvent e)windowActivated(Wi

30、ndowEvent e)windowDeactivated(WindowEvent e)windowIconified (WindowEvent e)windowDeiconified(WindowEvent e)第二节第二节 委托模型委托模型import java.awt.*;import java.awt.event.*;public class FL implements WindowListener Frame f; public static void main (String args) ( new FL () ). go(); public void go ()f = new F

31、rame ();f.setSize ( 300, 200);f.addWindowListener (this);f.setVisible (true); 第二节第二节 委托模型委托模型public class FL implements WindowListener public void windowClosing(WindowEvent e) System.exit(0); public void windowClosed(WindowEvent e) public void windowOpened(WindowEvent e) public void windowActivated(

32、WindowEvent e) public void windowDeactivated(WindowEvent e) public void windowIconified (WindowEvent e) public void windowDeiconified(WindowEvent e) 委托模型 在实践编程中,我们经常关怀的是接口中的个别方法,为了编程方便,Java为那些声明了多个方法的Listener接口,提供了一个对应的 适配器Adapter类委托模型public abstract class WindowAdapter public abstract class WindowA

33、dapter implements WindwoListener implements WindwoListener public void public void windowClosing(WindowEvent e) windowClosing(WindowEvent e) public void public void windowClosed(WindowEvent e) windowClosed(WindowEvent e) public void public void windowOpened(WindowEvent e) windowOpened(WindowEvent e)

34、 public void public void windowActivated(WindowEvent e) windowActivated(WindowEvent e) public void public void windowDeactivated(WindowEvent e) windowDeactivated(WindowEvent e) public void windowIconified public void windowIconified (WindowEvent e) (WindowEvent e) public void public void windowDeico

35、nified(WindowEvent e) windowDeiconified(WindowEvent e) 第二节第二节 委托模型委托模型import java.awt.*;import java.awt.event.*;public class FL extends WindowAdapter Frame f; public static void main (String args) ( new FL () ). go(); public void go ()f = new Frame ();f.setSize ( 300, 200);f.addWindowListener (this)

36、;f.setVisible (true); public void windowClosing(WindowEvent e) System.exit(0); 事件适配器 为了进展事件处置,需求创建实现Listener接口的类。 例如在MouseListener接口中,声明了下述笼统方法: mouseClicked(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent) mouseEntered(MouseEvent) mouseExited(MouseEvent) 在实现MouseListener接口的类中,必需同时实现这五

37、个方法。 为了方便,Java为那些声明了多个方法的Listener接口提供了一个对应的适配器(Adapter)类。事件适配器接口及适配器接接 口口 名名 称称适配器称号适配器称号ComponentListenerComponentAdapterContainerListenerContainerAdapterFocusListenerFocusAdapterKeyListenerKeyAdapterMouseListenerMouseAdapterWindowListenerWindowAdapter接口及适配器 在适配器类中实现了相应接口的全部方法,只是方法内容为空。 例如MouseList

38、ener接口的方式如下:public interface MouseListener extends EventListener public void mouseClicked(MouseEvent e);public void mousePressed(MouseEvent e);public void mouseReleased(MouseEvent e);public void mouseEntered(MouseEvent e);public void mouseExited(MouseEvent e);事件适配器 与其对应的适配器为MouseAdapter:public abstr

39、act class MouseAdapter implements MouseListener public void mouseClicked(MouseEvent e) public void mousePressed(MouseEvent e) public void mouseReleased(MouseEvent e) public void mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) 事件适配器 在创建新类时,可以不实现接口,而是只承继某个适当的适配器,并且覆盖所关怀的事件处置方法。事件适配器例i

40、mportjava.awt.*;importjava.awt.event.*;public class MouseClickHandler extends MouseAdapter/ 由于只关怀对单击鼠标事件的处置,/ 因此在这里承继MouseAdapter,/ 以防止编写其他不需求的事件处置方法public void mouseClicked(MouseEvente) / 进展有关的处置 用内部类实现事件处置 内部类inner class是被定义于另一个类中的类,运用内部类的主要缘由是由于: 一个内部类的对象可访问外部类的成员方法和变量,包括私有的成员。 实现事件监听器时,采用内部类、匿名类

41、编程非常容易实现其功能。内部类经常在内部类经常在AWT的事件处置机制中运用的事件处置机制中运用 用内部类实现窗口的封锁事件import javax.swing.*;import java.awt.event.*;public class WindowClosing public static void main(String args) JFrame frame = new JFrame();class QuitWindow extends WindowAdapterpublic void windowClosing(WindowEvent e)System.exit(0);frame.add

42、WindowListener(new QuitWindow();frame.setSize(200,300);frame.show(); 匿名类Anonymous Class 一个内部类的类声明只是在创建此类对象时用了一次,而且要产生的新类需承继一个已有的父类或实现一个接口,才干思索用匿名类。 匿名类本身无名,因此它没有构造方法,它需求显式地调用一个无参的父类的构造方法,并且重写父类的方法。 所谓的匿名就是该类连名字都没有,只是显式地调用一个无参的父类的构造方法。 用匿名类实现窗口的封锁事件public class WindowClosing public static void main(S

43、tring args) JFrame frame = new JFrame();frame.addWindowListener( new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0););frame.setSize(200,300); frame.show(); import java.awt.*;import java.awt.event.*;public class TestAnonymous2 Frame f = new Frame(Test);TextField tf = new TextFi

44、eld(10);Button b1 = new Button(Start);public TestAnonymous2()f.add(b1,North);f.add(tf,South);b1.addActionListener(new ActionListener()private int i;public void actionPerformed(ActionEvent e) tf.setText(e.getActionCommand() + +i); );f.addWindowListener(new WindowAdapter()委托事件处置模型的优点:使不相关的组件可以反复执行同样的事

45、件监听程序。 可以创建过滤器适配器类将事件分类处置。 更有利于在不同的类间进展分工协作。委托事件处置模型的优缺陷委托事件处置模型的优缺陷委托事件处置模型的缺陷:较为复杂和难于了解。将JDK 1.0程序代码转换到JDK 1.1并非易事。虽然当前的JDK在支持委托事件处置模型的同时也支持层次事件处置模型,但两者不能混用。委托事件处置模型的优缺陷委托事件处置模型的优缺陷事件处置举例 1. 一个事件源组件上可以同时注册多个监听器 2. 一个监听器对象可以同时注册到多个事件源组件上 3. 事件源的信息可以随它所触发的事件自动传送到一切注册过的监听器import java.awt.*; import ja

46、va.awt.event.*;public class TestActionEvent2 public static void main(String args) Frame f = new Frame(Test);Button b1 = new Button(Start);Button b2 = new Button(Stop);Monitor2 bh = new Monitor2();b1.addActionListener(bh); b2.addActionListener(bh);b2.setActionCommand(game over);f.add(b1,North); f.add

47、(b2,Center);f.pack(); f.setVisible(true); class Monitor2 implements ActionListener public void actionPerformed(ActionEvent e) System.out.println(a button has been pressed, + the relative info is:n + e.getActionCommand(); 鼠标事件-MouseEvent 鼠标事件MouseEvent对应于接口MouseListener。鼠标事件-MouseMotionEvent 鼠标事件Mous

48、eMotionEvent对应于接口MouseMotionListener。import java.awt.*;import java.awt.event.*;public class TestInner Frame f = new Frame(内部类测试);TextField tf = new TextField(30);public TestInner()f.add(new Label(请按下鼠标键并拖动), North);f.add(tf, South);f.setBackground(new Color(120,175,175);f.addMouseMotionListener(new

49、InnerMonitor();f.addMouseListener(new InnerMonitor();f.setSize(300, 200); f.setVisible(true);public static void main(String args) TestInner t = new TestInner();键盘事件 键盘事件KeyEvent对应的监听器接口KeyListener。 import javax.swing.import javax.swing.* *; ;import java.awt.event.import java.awt.event.* *; ;import j

50、ava.awt.import java.awt.* *; ;public class MouseAndKeyDemo extends public class MouseAndKeyDemo extends JFrameJFrameint lastX=0,lastY=0;int lastX=0,lastY=0;public MouseAndKeyDemo()public MouseAndKeyDemo()super(MouseAndKey);super(MouseAndKey);setBackground(Color.white);setBackground(Color.white);setF

51、oreground(Color.blue);setForeground(Color.blue);addMouseListener (new addMouseListener (new MouseAdapter()MouseAdapter() public void public void mouseEntered(MouseEvent e)mouseEntered(MouseEvent e) requestFocus(); / requestFocus(); /恳求恳求界面获取焦点界面获取焦点 record(e.getX(),e.getY();record(e.getX(),e.getY();

52、 public void public void mousePressed(MouseEvent e)mousePressed(MouseEvent e) record(e.getX(),e.getY(); record(e.getX(),e.getY(); ); ); addMouseMotionListener (new addMouseMotionListener (new MouseMotionAdapter()MouseMotionAdapter() public void public void mouseDragged(MouseEvent e)mouseDragged(Mous

53、eEvent e) int x=e.getX(); int x=e.getX(); int y=e.getY(); int y=e.getY(); Graphics g=getGraphics(); Graphics g=getGraphics(); g.drawLine(lastX,lastY,x,y); / g.drawLine(lastX,lastY,x,y); /画线画线 record(x,y); record(x,y); ); ); addKeyListener ( new KeyAdapter()addKeyListener ( new KeyAdapter() public vo

54、id keyTyped(KeyEvent e) public void keyTyped(KeyEvent e) String String s=String.valueOf(e.getKeyChar();s=String.valueOf(e.getKeyChar(); getGraphics().drawString(s,lastX,lastY);getGraphics().drawString(s,lastX,lastY); record(lastX+12,lastY); record(lastX+12,lastY); ); );setSize(300,150); setSize(300,

55、150); setVisible(true); setVisible(true);setDefaultCloseOperation(JFrame.EXIT_setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);ON_CLOSE); public void record(int x,int y) public void record(int x,int y) lastX=x; lastX=x; lastY=y; lastY=y; public static void main(String args) public static void main(Str

56、ing args) new MouseAndKeyDemo(); new MouseAndKeyDemo(); java.lang.Object -java.awt.GraphicsGraphics 类是一切图形上下文的笼统基类,允许运用程序在组件曾经在各种设备上实现以及闭屏图像上进展绘制。 Graphics 对象封装了 Java 支持的根本呈现操作所需的形状信息。此形状信息包括以下属性: 要在其上绘制的 Component 对象。 呈现和剪贴坐标的转换原点。 当前剪贴区。 当前颜色。 当前字体。 当前逻辑像素操作函数XOR 或 Paint。 绘图类绘图类绘图方式 绘图类Graphics是一种

57、特殊的笼统类,无需经过new实例化而可以直接运用,例如, Graphics g; g.drawString(“test,10,10); 运用Graphics类必需依赖于某一个组件。声明的类是Component的子类 声明的类不是Component的子类 声明的类是Component的子类 public class MyFrame1 extends Framepublic class MyFrame1 extends Frame public void paint(Graphics g)public void paint(Graphics g) g.drawString(g.drawString(“testtest,1010,10)10); public static void main(String arg)public static void main(String arg) new MyFrame1().setVisible(true)new MyFrame1().setVisible(true); 声明的类不是Component的子类 public class MyFrame2public class

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论