1 / 43

第7章  AWT 组件及事件处理

第7章  AWT 组件及事件处理. 7.1 Java 窗口 7.2 文本框 7.3 内部类实例做监视器 7.4 按钮与标签 7.5 菜单项 7.6 文本区 7.7 面板 7.8 布局 7.9 画布. 7.10 选择型组件 7.11 Component 类的常用方法 7.12 窗口事件 7.13 鼠标事件 7.14 焦点事件 7.15 键盘事件 7.16 使用剪贴板 7.17 打印 7.18 综合实例. 图形用户界面.

havyn
Télécharger la présentation

第7章  AWT 组件及事件处理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章 AWT组件及事件处理 • 7.1Java窗口 • 7.2文本框 • 7.3内部类实例做监视器 • 7.4按钮与标签 • 7.5菜单项 • 7.6文本区 • 7.7面板 • 7.8布局 • 7.9画布 • 7.10 选择型组件 • 7.11 Component类的常用方法 • 7.12 窗口事件 • 7.13 鼠标事件 • 7.14 焦点事件 • 7.15 键盘事件 • 7.16 使用剪贴板 • 7.17 打印 • 7.18 综合实例

  2. 图形用户界面 • 通过图形用户界面(GUI:Graphics User Interface),用户和程序之间可以方便地进行交互。Java的抽象窗口工具包(AWT:Abstract Window Toolkit)中包含了许多类来支持GUI设计。AWT由Java的java.awt包提供,该包中有许多用来设计GUI的组件类,如:按钮、菜单、列表、文本框等组件类,同时它还包含窗口、面板等容器类。

  3. 容器类(Container)和组件类(Component) • Java.awt包中一部分类的层次关系如图所示

  4. 7.1 Java窗口 • Frame类是Container类的间接子类。当需要一个窗口时,可使用Frame或其子类创建一个对象。窗口也是一个容器,可以向窗口添加组件。需要注意的是,窗口默认地被系统添加到显示器屏幕上,因此,不允许将一个窗口添加到另一个容器中。

  5. 1. Frame常用方法 • 1.Frame() 该构造方法可以创建一个无标题的窗口,窗口的默认布局为BorderLayout布局。 • 2.Frame(String s) 该构造方法可以创建一个标题为s的窗口,窗口的默认布局为BorderLayout布局。 • 3.public void setBounds(int a,int b,int width,int height) 窗口调用该方法可以设置出现在屏幕上时的初始位置是(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。 • 4.public void setSize(int width,int height) 设置窗口的大小,窗口在屏幕出现是默认位置是(0,0)。 • 5.public void setVisible(boolean b) 设置窗口是可见还是不可见,窗口默认是不可见的。 • 6.public void setResizable(boolean b) 设置窗口是否可调整大小,窗口默认是可调整大小的。

  6. 2.菜单条、菜单、菜单项 • java.awt包中的Menubar类是负责创建菜单条的,即Menubar的一个实例就是一个菜单条。Frame类有一个将菜单条放置到窗口中的方法:setMenuBar(MenuBar bar); • java.awt包中的Menu类是负责创建菜单的,即Menu的一个实例就是一个菜单 • java.awt包的MunuItem类负责创建菜单项,即MenuItem的一个实例就是一个菜单项

  7. 7.3 文本框 • java.awt包中的类TextField类创建文本框. • 用户可以在文本框输入单行的文本 .

  8. 1.TextField类的主要方法 • TextField(int x)如果使用这个构造方法创建文本框对象,文本框中的可见字符序列的长度为 x个机器字符长。文本框是可编辑的,用户可以在文本框中输入若干个字符。 • TextField(String s )如果使用这个构造方法创建文本框对象,则文本框的初始字符串为s。文本框是可编辑的,可以在文本框中输入若干个字符。 • public void setText(String s) 文本框对象调用该方法可以设置文本框中的文本为参数s指定的文本,文本框中先前的文本将被清除。 • public String getText() 文本框对象调用该方法可以获取文本框中的文本。 • public void addActionListener(ActionListener l) 文本框对象调用该方法可以向文本框增加动作监视器(将监视器注册到文本框)。

  9. 2.文本框上的ActionEvent事件 • 学习组件除了了解组件的属性和功能外,一个更重要的方面是学习怎样处理组件上发生的界面事件。 • 在学习处理事件时,必须很好地掌握事件源、监视器、处理事件的接口这三个概念。 • 通过处理文本框这个具体的组件上的事件,来掌握处理事件的基本原理。

  10. Java的事件处理模式 • 事件源 能够产生事件的对象都可以成为事件源,如文本框、按钮、下拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。 • 监视器 需要一个对象对事件源进行监视,以便对发生的事件作出处理。事件源通过调用相应的方法将某个对象作为自己的监视器。例如,对于文本框,这个方法是: addActionListener(监视器);  创建该监视器对象的类必须声明实现相应的接口 • 处理事件的接口 在文本框获得输入焦点之后,如果用户按回键,Java运行系统就自动用ActionEvent类创建了一个对象,即发生了ActionEvent事件 .当事件源发生事件时,监视器就自动调用执行被类实现的某个接口方法 .

  11. 处理事件示意图

  12. 7.4按钮与标签 • 标签的功能是只显示文本,不能动态地编辑文本。Lalel类的实例就是一个标签. • Java.awt包中的Button类是专门用来建立按钮的。即Button类创建的一个对象就是一个按钮。 • 按钮可以发生ActionEvent事件,当按钮获得监视器之后,用鼠标单击按钮,就发生ActionEven事件.

  13. 7.5菜单项 • 单击某个菜单项可以发生ActionEvent事件,因此,我们可以通过处理ActionEvent事件实现我们想要进行的操作。 • 可以使用MenuShotcut类为菜单项设置快捷键,该类的一个构造方法是: MenuShotcut (int key); 其中key可以取值:KeyEvent.VK_A~ KeyEvent.VK_Z; • 菜单项使用setShortcut(MenuShortcut k)方法来设置快捷键。

  14. 7.6文本区 • java.awt包中的类TextArea类是专门用来建立文本区的,即TextArea创建的一个对象称做一个文本区。用户可以在文本区输入多行的文本。

  15. 1. TextArea类主要方法 • TextArea(int x,int y)使用这个构造方法创建文本区对象,文本框可见行数和列数数分别为x和y。文本区有水平和垂直滚动条。 • public void setText(String s) 文本区对象调用该方法可以将文本区中的文本设置为参数s指定的文本,文本区中先前的文本将被清除。 • public String getText() 文本区对象调用该方法可以获取文本区中的文本。 • public void append(String s) 文本区对象调用该方法可以在文本区中尾加文本 . • addTextListener(TextListener) 文本区对象调用该方法可以向文本框增加文本监视器。

  16. 2.文本区上的TextEvent事件 • 对于文本区事件源,可以发生TextEvent事件。当文本区获得监视器之后,在文本区域中改变文本的内容,如键入字符、删除字符时,TextEvent类将自动创建一个事件对象。 • 发生TextEvent事件的事件源获得监视器的方法是addTextListener(监视器);, 由于文本区可以发生TextEvent事件,所以TextArea类提供了addTextListener方法。 • 处理发生TextEvent 事件的接口是TextListener,该接口中只有一个的方法: textValueChanged (TextEvent e) • 创建文本区监视器的类必须要实现TextListener接口。当文本区发生TextEvent事件时,监视器将自动调用方法: textValueChanged (TextEvent e) 对发生的事件作出处理。

  17. 7.7面板 • java.awt包的Panel类是Container(容器)的子类,因此Panel类及其子类的实例也是一个容器,Panel型容器的默认布局是FlowLayout型布局。Panel类创建的对象称做面板,我们经常在一个面板里添加若干个组件后,再把面板放到另一个容器里。 • java.awt包中的ScrollPane类也是Container类的子类,因此该类创建的对象也是一个容器,称为滚动面板。我们可以把一个组件放到一个滚动面板中,然后通过滚动条来观察这个组件。与Panel创建的容器所不同的是,ScrollPane带有滚动条,而且只能向滚动面板添加一个组件。

  18. 7.8布局 • 当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。我们将分别介绍java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局类和java.swing.border包中的BoxLayout布局类。 • 容器可以使用方法: setLayout(布局对象); 来设置自己的布局。

  19. 1. FlowLayout布局 • FlowLayout类创建的对象称做FlowLayout型布局。FlowLayout型布局是Panel型容器的默认布局,即Panel及其子类创建的容器对象,如果不专门为其指定布局,则它们的布局就是FlowLayout型布局。 • 如果一个容器使用这个FlowLayout型布局,组件按照加入的先后顺序从左向右排列,一行排满之后就转到下一行继续从左至右排列 .

  20. 2. BorderLayout布局 • BorderLayout 布局是Window型容器的默认布局,例如Frame、Dialog都是Window类的子类,它们的默认布局都是BorderLayout 布局。 • 如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域,中间的区域最大。

  21. 3. CardLayout 布局 • 使用CardLayout 的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面一张一样,这个被显示的组件将占据所有的容器空间,依次排序。

  22. 4. GridLayout布局 • GridLayout的布局策略是把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。GridLayout比较灵活,划分多少网格由程序自由控制,而且组件定位也比较精确. • 由于GridLayout布局中每个网格都是相同大小并且强制组件与网格的大小相同,使得容器中的每个组件也都是相同的大小,显得很不自然。为了克服这个缺点,你可以使用容器嵌套。

  23. 5. BoxLayout布局 • 盒式布局的容器将组件排列在一行或一列,这取决于创建盒式布局对象时,是否指定了是行排列还是列排列。 • 使用行(列)型盒式布局的容器将组件排列在一行(列),组件按加入的先后顺序从左(上)向右(下)排列,容器的两端是剩余的空间。和FlowLayou布局不同的是,使用行型盒式布局的容器只有一行(列),即使组件再多,也不会延伸到下一行(列),这些组件可能会被缩小大小,紧缩在这一行(列)中。

  24. 7.9画布 • java.awt包中的类Canvas负责创建画布对象。创建画布对象的常用办法是用Canvas的子类来创建画布对象,并在子类中重写父类的public void paint(Graphics g)方法。该方法是Component类的一个方法,可以在其子类中重写这个方法,当重写这个方法时,参数g是自动实例化的,这样我们就可以在子类中使用 g调用相应方法,比如画串、画图形、图像等 .

  25. 7.5选择型组件 • 选择框选择框提供两种状态,一种是选中,另一种是未选中。java.awt包中的Checkbox用来建立选择框,即Checkbox创建的一个对象就是一个选择框。 • 选择框可以发生ItemEvent事件,发生ItemEvent事件的事件源获得监视器的方法是:addItemListener(监视器) . • 创建监视器的类必须实现ItemListener接口,该接口中只有一个的方法。当在选择框发生ItemEvent事件时,监视器将自动调用接口方法: temStateChanged(ItemEvent e) 对发生的事件作出处理。

  26. 下拉列表Choice创建的一个对象称作一个下拉列表组件,它是用户十分熟悉的一个组件。用户可以在下拉列表看到第一个选项和它旁边的箭头按钮,当用户单击箭头按钮时,选项列表打开。 • 下拉式列表可以发生ItemEvent事件。当下拉式列表获得监视器之后,用户在下拉列表选项列表中选中某个选项时就发生ItemEvent事件.

  27. 滚动列表java.awt包中的类List类建立滚动列表 . • 滚动列表和下拉列表的另一不同之处是,滚动列表除了可以发生ItemEvent事件外,还可以发生ActionEvent事件。当用鼠标单击滚动列表的某个选项后,发生ItemEvent事件;当用鼠标双击某个选项后,发生ActionEvent事件。

  28. 7.11 Component类的常用方法 • Component类是所有组件的父类,这一节介绍Component类的常用方法

  29. 1.组件的颜色 • public void setBackground(Color c) 设置组件的背景色。 • public void setForeground(Color c) 设置组件的前景色。 • public Color getBackground() 获取组件的背景色。 • public Color getForeground() 获取组件的前景色。

  30. 2.组件的字体 • public void setFont(Font f) 组件调用该方法设置组件上的字体。例如,文本组件调用该方法可以设置文本组件中的字体。 • public Font getFont() 组件调用该方法获取组件上的字体。

  31. 3.组件的大小与位置 • public void setSize(int width,int height) 组件调用该方法设置组件的大小,参数width指定组件的宽度,height指定组件的高度。 • public void setLocation(int x,int y)组件调用该方法设置组件在容器中的位置,包含该组件的容器都有默认的坐标系,容器的坐标系的左上角的坐标是(0,0),参数x,y指定该组件的左上角在容器的坐标系中的坐标,即组件距容器的左边界 x个像素,距容器的上边界 y 个像素。 • public Dimension getSize()组件调用该方法返回一个Dimension对象的引用,该对像实体中含有名字是width 和height的成员变量,方法返回的Dimension 对象的width的值就是组件的宽度、height的值就是当前组件的高度。 • public Point getLocation()组件调用该方法返回一个Point对象的引用,该对像实体中含有名字是x 和y的成员变量,方法返回的Point对象的x,y的值就是组件的左上角在容器的坐标系中的x坐标和y坐标。 • public void setBounds(int x,int y,int width,int height)组件调用该方法设置组件在容器中的位置和组件的大小。该方法相当于setSize方法和setLocation方法的组合。 • public Rectangle getBounds()组件调用该方法返回一个Rectangle对象的引用,该对象实体中含有名字是x、y、width 和height的成员变量,方法返回的Rectangle对象的x,y的值就是组件的左上角在容器的坐标系中的x坐标和y坐标,width和height的值就是当前组件的宽度和高度。

  32. 4.组件的激活与可见性 • public void setEnabled(boolean b) 组件调用该方法可以设置组件是否可被激活,当参数b取值true时,组件可以被激活,当参数b取值false 时,组件不可激活。默认情况下,组件是可以被激活的。 • public void setVisible(boolean) 设置组件在该容器中的可见性,当参数b取值true时,组件在容器中可见,当参数b取值false 时,组件在容器中不可见。除了Window型组件外,其它类型组件默认是可见的。

  33. 5.组件上的光标 • public void setCursor(Cursor c) 设置鼠标指向组件时的光标形状。 • 可以使用 Cursor类的类方法直接获得一个光标对象,例如: Cursor c=Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);

  34. 6.paint方法与repaint方法 • 调用repaint()方法时,repaint()方法会再去调用update(Graphics g)方法。update(Graphics g)方法也是Component类中的一个方法,这个方法的功能是:清除paint()方法以前所画的内容,然后再调用paint方法。因此我们可以在子类中重写update方法(即隐藏父类的方法),根据需要来清除哪些部分或保留哪些部分。

  35. 7.12窗口事件 • Frame是Window的子类,凡是 Window子类创建的对象都可以发生WindowEvent类型事件,即窗口事件。 • 当一个Frame窗口被激活、撤消激活、打开、关闭、图标化或撤消图标化时,就引发了窗口事件,即WindowEvent创建一个窗口事件对象。WindowEvent创建的事件对象调用getWindow()方法可以获取发生窗口事件的窗口。窗口使用addWindowlistener方法获得监视器,创建监视器对象的类必须实现WindowListener接口,该接口中有7个不同的方法 .

  36. 1. WindowListener接口中的方法 • public void windowActivated(WindowEvent e) 当窗口从非激活状态到激活时,窗口的监视器调用该方法。 • public void windowDeactivated(WindowEvent e) 当窗口激活状态到非激活状态时,窗口的监视器调用该方法。 • public void windowClosing(WindowEvent e) 当窗口正在被关闭时,窗口的监视器调用该方法。 • public void windowClosed(WindowEvent e) 当窗口关闭后,窗口的监视器调用该方法。 • public void windowIconified(WindowEvent e) 当窗口图标化时,窗口的监视器调用该方法。 • public void windowDeiconified(WindowEvent e) 当窗口撤消图标化时,窗口的监视器调用该方法。 • public void windowOpened(WindowEvent e) 当窗口打开时,窗口的监视器调用该方法。

  37. 2. WindowAdapter适配器 • 适配器可以代替接口来处理事件,当Java提供处理事件的接口中多于一个方法时,Java相应地就提供一个适配器类,比如WindowAdapter类。适配器已经实现了相应的接口,例如WindowAdapter类实现了WindowListener接口。因此,可以使用WindowAdapte的子类创建的对象做监视器,在子类中重写所需要的接口方法即可

  38. 7.13鼠标事件 • 任何组件上都可以发生鼠标事件,如:鼠标进入组件、退出组件、在组件上方单击鼠标、拖动鼠标等都触发组件发生鼠标事件,也就是说,组件可以成为发生鼠标事件的事件源。

  39. 1.MouseListener接口 • 使用MouseListener接口可以处理5种操作触发的鼠标事件: (1)在事件源上按下鼠标键。 (2)在事件源上释放鼠标键。 (3)在事件源上击鼠标键。 (4)鼠标进入事件源。 (5)鼠标退出事件源。 • 鼠标事件的类型是MouseEvent,即当发生鼠标事件时,MouseEvent类自动创建一个事件对象。

  40. MouseListener接口中的方法 • (1)mousePressed(MouseEvent) 负责处理在组件上按下鼠标触发的鼠标事件,当在组件上按下鼠标时,监视器将自动调用接口中的这个方法对事件作出处理。 • (2)mouseReleased(MouseEvent) 负责处理在组件上释放鼠标触发的鼠标事件,当在组件上释放鼠标时,监视器将自动调用接口中的这个方法对事件作出处理。 • (3)mouseEntered(MouseEvent) 负责处理鼠进入组件触发的鼠标事件,当鼠标进入组件上方时,监视器将自动调用接口中的这个方法对事件作出处理。 • (4)mouseExited(MouseEvent) 负责处理鼠标离开组件触发的鼠标事件,当鼠标离开组件时,监视器自动调用接口中的这个方法对事件作出处理。 • (5)mouseClicked(MouseEvent) 负责处理在组件上单击或连击鼠标触发的鼠标事件,当单击或连击鼠标时,监视器自动调用接口中的这个方法对事件作出处理。

  41. 2.MouseMotionListener接口 • 使用MouseMotionListener接口可以处理以下两种操作触发的鼠标事件: (1)在事件源上拖动鼠标。 (2)在事件源上移动鼠标。 • MouseMotionListener接口中有如下方法: (1)mouseDragged(MouseEvent) 负责处理在组件上拖动鼠标触发的鼠标事件,当在组件上拖动鼠标时,监视器调用接口中的这个方法对事件作出处理。 (2)mouseMoved(MouseEvent) 负责处理在组件上运动鼠标触发的鼠标事件,当在组件上运动鼠标时,监视器调用接口中的这个方法对事件作出处理

  42. 7.14 焦点事件 • 组件可以触发焦点事件。组件可以使用 public void addFocusListener(FocusListener listener) 增加焦点事件监视器。 • 当组件获得焦点监视器后,如果组件从无输入焦点变成有输入焦点或从有输入焦点变成无输入焦点都会触发FocusEvent事件。创建监视器的类必须要实现FocusListener 接口,该接口有两个方法: public void focusGained(FocusEvent e) public void focusLost(FocusEvent e) • 当组件从无输入焦点变成有输入焦点触发FocusEvent事件时,监视器调用类实现的接口方法:focusGained(FocusEvent e);当组件从有输入焦点变成无输入焦点触发FocusEvent事件时,监视器调用类实现的接口方法:focusLost(FocusEvent e)。

  43. 7.15 键盘事件 • 当按下、释放或敲击键盘上一个键时就发生了键盘事件,在Java1.2事件模式中,必须要有发生事件的事件源。当一个组件处于激活状态时,敲击键盘上一个键就导致这个组件上发生了键盘事件。 • 事件源使用addKeyListener方法获得监视器。 • 使用KeyListener接口处理键盘事件 .接口KeyListener中有3个方法: public void keyPressed(KeyEvent e), public void keyTyped(KeyEvent e), public void KeyReleased(KeyEvent e)。

More Related