1 / 104

第 6 章 AWT/Swing 组件及事件处理

第 6 章 AWT/Swing 组件及事件处理. 6.1 图形用户界面概述 6.2 GUI 标准组件的使用 6.3 Java 的事件处理 6.4 窗口及菜单设计 6.5 图形界面的布局设计 6.6 建立对话框. 学习提要. 掌握常用的 GUI 标准组件及图形界面的设计方法; 掌握 JAVA 的事件处理机制和常用事件响应代码的编写方法; 掌握容器及布局、菜单、对话框的设计方法. 6.1 图形用户界面概述. 6.1.1 基本概念 ( 1 ) GUI — 图形用户界面 ( Graphics User Interface )

Download Presentation

第 6 章 AWT/Swing 组件及事件处理

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. 第6章 AWT/Swing组件及事件处理 6.1 图形用户界面概述 6.2 GUI标准组件的使用 6.3 Java的事件处理 6.4 窗口及菜单设计 6.5 图形界面的布局设计 6.6 建立对话框

  2. 学习提要 • 掌握常用的GUI标准组件及图形界面的设计方法; • 掌握JAVA的事件处理机制和常用事件响应代码的编写方法; • 掌握容器及布局、菜单、对话框的设计方法

  3. 6.1 图形用户界面概述 6.1.1 基本概念 (1) GUI—图形用户界面(Graphics User Interface) 使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,帮助用户和计算机之间进行交互。 (2)AWT——抽象窗口工具集(abstract window toolkit) Java中用来生成图形用户界面的基础类库是java.awt包,它是Java基本包中最大的一个,定义了所有GUI组件类,以及其它用于构造图形界面的类。Sun公司在JDK1.0中就提供了AWT。 为了实现跨平台特性,AWT类库中的各种操作被定义成在一个并不存在的“抽象窗口”中进行。

  4. AWT组件的类层次 • Component 组件是所有AWT组件的基类,提供了基本的显示和事件处理特征。

  5. (3) Swing GUI组件 • 在Java2中,javax.swing包被列入Java的基础类库JFC,其中定义的Swing GUI组件相对于java.awt包的各种GUI组件增加了许多功能。 • Swing组件类 Swing包含250多个类(有些是组件,有些是支持类,组件的名字都以 J 开头), Swing提供了40多个组件,是AWT的4倍,用轻量组件(没有本地对等组件)代替了AWT的重量组件(与本地对等组件相关联)。 除模仿AWT组件所提供的功能外,几乎所有的Swing替代组件都有其他一些特性,如Swing按钮可以显示图标和文本,AWT按钮只显示文本。

  6. (4)设计图形界面的步骤 1)定义最外层的容器(Frame,JFrame),设定布局管理方式; 2)在外层容器中依次加入小容器(Panel等)和标准组件; 3)设计图形界面元素的物理外观(颜色,字体,对齐方式等、位置); 4)定义界面元素对不同事件(如鼠标点击等)的响应,实现界面与用户的交互功能.

  7. 6.1.2 图形用户界面元素 分三类: 容器、控制组件、用户自定义成分。 (1)容器 是用来组织其他界面成分和元素的单元,如窗体(Frame、JFrame)、面板(Panel、JPanel)等。 主要作用: 用来容纳、排列其它界面元素。 容器的特点: (1)可以容纳其他界面元素;(2)通过设置布局方式,来决定其它界面元素的排列方式。 思考:作为最外层容器的Frame和JFrame,在其中加入其它界面元素时有何区别?(理解JFrame的ContentPane)

  8. (2)控制组件(标准界面元素) 如Label、TextField、Button等。 例:创建Button,并处理事件(ActionEvent)。 Button btn=new Button(“显示”); add(btn); btn.addActionListener(this); public void actionPerformed(ActionEvent e) { if(e.getSource()==btn) showStatus(“你按下了显示按钮!!”); } 控件组件是图形界面的最小单位,里面不能再包含其他成分。如:命令按钮、文本域、标签等。控件的作用是完成与用户的一次交互,如接受用户指令、向用户显示文本等。 使用控件的步骤: 创建组件→确定属性(颜色、字体等) →加到外层容器中→注册事件监听器→重载事件处理方法。

  9. 6.1.3 用户自定义图形界面成分 自定义成分是指: 利用Java类库中的类及其方法来绘制符合用户特定要求的图形界面成分,也可以将已经存在的图形、动画等加载到当前程序中来。 (1) 绘制图形(线段、矩形、圆、多边形、弧形) Graphics类——绘制直线、矩形、多边形、圆等。 Point类——表示一个象素点 Dimension类——表示宽和高 Rectangle类——表示一个矩形 Polygon类——表示一个多边形 Color类——表示颜色

  10. (2) 显示文字 Java中用一个Font类的对象来表示一种字体显示效果,包括字体类型、字型和字号。 Font.PLAIN ——正常 字型常量 Font.BOLD ——加粗 Font.ITALIC ——倾斜 1) 创建字体对象 Font MyFont=new Font(“TimesRoman”,Font.BOLD,12); 2)使用字体对象 g.setFont(MyFont); //g是Graphics对象 btn.setFont(MyFont); //btn是按钮对象

  11. (3) 控制颜色 java.awt.Color--代表颜色。可以直接使用系统定义好的颜色常量(如Color.blue),也可以通过R、G、B三色比例来创建自己的Color对象。 1) Color类的构造函数 public Color(int Red,int Green,int Blue); // 每个参数的取值范围在0-255之间。 public Color(float Red, float Green, float Blue); // 每个参数的取值范围在0-1.0之间。 public Color(int RGB); // 指明RGB三色的比例,这个参数的0-7比特代表红色的比例,8-15比特代表绿色的比例,16-23比特代表蓝色的比例。

  12. 例: • 创建自己的颜色: Color blueColor= new Color(0,0,255); g.setColor(blueColor); • 利用系统的颜色常量: g.setColor(Color.blue); 2) GUI控件的颜色设置方法 public void setBackground(Color c); //设置背景颜色 public Color getBackground(); //取得背景颜色 public void setForeground(Color c); //设置前景颜色 public Color getForeground(); //取得前景颜色

  13. (4) 显示图象 • Java中可以利用Graphics类的drawImage()方法显示图象。drawImage()方法的格式如下: drawImage(参数1,参数2,参数3) 参数1:Image对象,可以用系统为Applet类定义的getImage()方法获得;参数2、参数3:显示时图象左上角的X、Y坐标。 • getImage(参数1,参数2 ) 参数1:图象文件所在的URL地址 参数2:图象文件的文件名 • getDocumentBase() 获取含有该Applet的HTML文件的URL地址。

  14. 例:图形用户界面—自定义成分示例 import java.awt.*; import java.applet.Applet; public class TestGraphics extends Applet { Image myImage ; Font myFont=new Font("黑体",Font.BOLD,20); Color myColor=new Color(120,25,180); public void init() { myImage = getImage(getDocumentBase(), "fys.jpg" ); }

  15. public void paint(Graphics g) { g.drawLine(30,5,40,5); //画线 g.setColor(Color.blue); //设置字体颜色 g.drawRect(40,10,50,20); //画空长方形 g.setColor(Color.red); setBackground(Color.yellow); //设置背景颜色 g.fillRect(60,30,70,40); //画实体长方形 g.setFont(myFont); g.drawString("大家好!",100,200); g.setColor(myColor); g.drawString(g.getFont().toString(),10,250); g.drawImage(myImage, 150, 10, this ); //显示图片 } }

  16. (5) 实现动画效果 用Java实现动画的原理与放映动画片类似,取若干相关的图象,按顺序、连续地在屏幕上先显示,后擦除,循环往复就可以获得动画的效果。 课外实践题: 编写Java Applet,实现将若干幅图片按一定的时间间隔(如1秒),交替显示. (第1幅第2幅 … 第10幅第1幅…)

  17. 6.2 常用的GUI标准组件AWT(Swing)介绍 • 标签(Label)(J Label) Label的构造函数: • Label (String):指定标签文字 • Label (String,int):指定标签文字及对齐方式 0= Label .LEFT 1= Label .RIGHT 2= Label.CENTER void setAlignment(int) :设置标签对齐方式。

  18. 文本输入框(TextField)(JTextField ) (JPasswordField 密码输入框) TextField的构造函数: TextField (int) TextField (String) TextField(String,int)指定初始文本及长度

  19. TextField对事件的响应

  20. 多行文本组件(TextArea)(JTextArea) • 多行文本组件的构造函数: TextArea (int, int) //用指定的行数、列数创建 TextArea (String) //用指定的初始文本创建 TextArea (String, int , int ) //用指定的初始文本、行数、列数创建 TextArea( String,int, int, int)//用指定的初始文本、行数、列数及滚动条创建 • 事件响应与TextField相同。

  21. 按钮(Button)(JButton) 按钮的构造函数: Button(String text) //创建一个带有文本信息的按钮 如果是JButton,上面不仅可以显示文字,还可以显示图标。(Swing组件比AWT组件更生动。)

  22. Button对事件的响应 • 单击按钮可以引发动作事件(ActionEvent) • btn. addActionListener(监听器对象 ) • 监听器对象要实现ActionListener接口 • 在实现接口的方法public void actionPerformed()中可以用e.getSource()方法获取被点击的按钮对象 • 也可以用e.getActionCommand()方法获取按钮的标签或事先为该按钮设置的命令名 例: Button btn=new Button(“按钮标签”); btn.setActionCommand(“命令名”); public void actionPerformed (ActionEvent e) { if (e. getActionCommand() ==“命令名”) … 或 if (e.getSource()==btn) …. }

  23. 复选框组件(Checkbox)(JCheckbox) • 复选框的构造函数: Checkbox(String) //带显示标签 Checkbox(String,boolean)//带显示标签和初始状态 • true表示被选中,false表示未选中。

  24. Checkbox对事件的响应

  25. 单选按钮组件(JRadioButton) • 单选钮组件要先用CheckboxGroup()方法构造一个CheckboxGroup对象,再用Checkbox(String, CheckboxGroup ,boolean)方法创建Checkbox对象,如果不同的Checkbox在创建时属于同一个CheckboxGroup ,则组成单选按钮组(互斥选择)。 • 单选钮组件的状态属性,为true/false,表示选中或未选中。

  26. 单选按钮组件CheckboxGroup对事件的响应 • CheckboxGroup类不是java.awt.*包中的类,它是Object的直接子类,所以按钮组不能响应事件; • 单选按钮组中的每个单选按钮(CheckBox)可以响应ItemEvent类的事件。

  27. 组合框(Choice) (JComboBox)

  28. 创建组合框: Choice() //创建组合框

  29. 组合框(Choice)对事件的响应

  30. 下拉列表组件(List)(JList)

  31. 创建列表: List()//创建列表 List(int) //以指定的可见行数创建列表 List(int,boolean) //指定可见行数和是否允许多项选择

  32. 列表组件(List)对事件的响应

  33. 滚动条组件(Scrollbar)(JScrollbar)

  34. 滚动条的构造函数: Scrollbar() //垂直滚动条 Scrollbar (int) //指定方向的滚动条Scrollbar .HORIZONTAL (水平) Scrollbar .VERTICAL (垂直) Scrollbar(int, int, int, int,int)//指定方向、初始值、滚动块大小、最小值、最大值

  35. 滚动条组件(Scrollbar)对事件的响应

  36. 6.3 Java的事件处理 6.3.1 基本概念 事件处理三要素:事件源、事件类型、事件监听器 • 事件源:图形用户界面中引发事件的组件。 事件源可以注册监听器,并向其发送事件对象。 • 事件类型:Java的所有事件都封装成一个类,这些事件类定义在java.awt.event包中,所有的事件类都继承了AWTEvent类的一个方法getSource(),返回引发事件的事件源对象。 • 事件监听器:不同类型的事件发生后,由事件监听器接收事件并调用相应的事件处理方法。

  37. Java的事件委托模型

  38. AWTEvent类体系结构图 AWTEvent ActionEvent TextEvent AdjustmentEvent ComponentEvent ItemEvent WindowEvent ContainerEvent InputEvent PaintEvent FocusEvent MouseEvent KeyEvent

  39. 事件适配器(Adapter): (1)事件源.add***Listener(监听器对象); (2)监听器对象所在的类要实现***Listener接口,并实现接口中的抽象方法。如果接口中的抽象方法有2到多个,如MouseListener,MouseMotionListener,KeyListener,WindowListener等。则系统定义了***Adapter,让***Adapter实现相应***Listener接口; (3)有了Adapter(适配器),可以定义其子类(重写需要的方法),然后让其子类的对象充当监听器对象。

  40. 6.3.2 动作事件(ActionEvent )的处理 • 能够触发动作事件的动作有: • 点击按纽(Button) • 双击一个列表框(List)中的选项 • 选择菜单项(MenuItem) • 在文本框(TextField/TextArea)中敲回车 动作事件对应的事件类是ActionEvent类,其主要方法有: (1) public String getActionCommand( )—获得引发事件的项目信息 例:public void actionPerformed(ActionEvent e) { if ( e.getActionCommand( ) == ″命令名″ ) … }

  41. (2) public int getModifiers( )—当动作是同时与功能键配合使用时,获得引发事件的组合键信息,动作事件对应的事件监听器是ActionListener, 其主要方法是: actionPerformed(ActionEvent e) 实现动作事件的操作过程是: 1)注册动作监听器 addActionListener(监听器对象) 2) 监听器实现ActionListener接口的方法:actionPerformed(ActionEvent e)

  42. 6.3.3 文本事件(TextEvent)的处理 • TextEvent类只包含一个事件,即代表文本框中文本变化的事件TextValueChanged。在文本框中删除字符、改变字符、键入字符都将引发这个事件。 • 引发文本事件的基本组件有两种:单行文本框TextField和多行文本框TextArea,它们都是TextComponent的子类。

  43. 例 6-7 TextComponentEvent.java import java.applet.*; import java.awt.*; import java.awt.event.*; public class TextComponentEvent extends Applet implements TextListener,ActionListener { TextField tf; TextArea ta; public void init() { tf = new TextField(45); ta = new TextArea(10,45); add(tf); add(ta); tf.addActionListener(this); tf.addTextListener(this); }

  44. public void textValueChanged(TextEvent e) { if(e.getSource()==tf) ta.setText(((TextField)e.getSource()).getText()); } public void actionPerformed(ActionEvent e) { if(e.getSource()==tf) ta.setText(""); } }

  45. 6.3.4 选择事件(ItemEvent)的处理 • ItemEvent类只包含一个事件,即代表选择项的选中状态发生变化的事件ITEM-STATE-CHANGED。 • 引发这类事件的动作包括: (1) 改变列表类List对象选项的选中或不选中状态。 (2) 改变下拉列表类Choice对象选项的选中或不选中状态。 (3) 改变复选按钮类Checkbox对象的选中或不选中状态。 (4) 改变检测盒菜单项CheckboxMenuItem对象的选中或不选中状态。

  46. ItemEvent类的主要方法有: (1) public ItemSelectable getItemSelectable( ) 此方法返回引发选中状态变化事件的事件源,包括List对象、Choice对象、Checkbox对象等。 (2) public Object getItem( ) 此方法返回引发选中状态变化事件的具体选择项,例如用户选中的Choice中的具体item,通过调用这个方法可以知道用户选中了哪个选项。 (3) public int getStateChange( ) 此方法返回具体的选中状态变化类型,它的返回值在ItemEvent类的几个静态常量列举的集合之内: ① ItemEvent.SELECTED: 代表选项被选中。 ② ItemEvent.DESELECTED: 代表选项被放弃不选。

  47. 例 6-10 TestChoice.java import java.applet.*; import java.awt.*; import java.awt.event.*; public class TestChoice extends Applet implements ItemListener { Choice size; Button btn; public void init() { size = new Choice(); size.add("10"); size.add("14"); size.add("18"); add(size); btn = new Button("效果"); add(btn); size.addItemListener(this); }

  48. public void itemStateChanged(ItemEvent e) { Choice temp; Font oldF; String s; int si; if(e.getItemSelectable( ) instanceof Choice) { oldF = btn.getFont(); temp = (Choice)(e.getItemSelectable()); s = temp.getSelectedItem(); si = Integer.parseInt(s); btn.setFont (new Font(oldF.getName(),oldF.getStyle(),si)); } } }

  49. 6.3.5 调整事件(AdjustmentEvent)的处理 AdjustmentEvent类只包含一个事件——ADJUSTMENT-VALUE-CHANGED事件。 与ItemEvent事件引发的离散状态变化不同,ADJUSTMENT-VALUE-CHANGED是GUI组件状态发生连续变化的事件,引发这类事件的具体动作有: (1) 操纵滚动条(Scrollbar)改变其滑块位置。 (2) 操纵用户自定义的Scrollbar对象的子类组件,改变其滑块位置。

  50. AdjustmentEvent类的主要方法有: (1) public Adjustable getAdjustable( ) 这个方法返回引发状态变化事件的事件源,能够引发状态变化事件的事件源都是实现了Adjustable接口的类。 (2) public int getAdjustmentType( ) 这个方法返回状态变化事件的状态变化类型,其返回值在AdjustmentEvent类的几个静态常量所列举的集合之内。 • AdjustmentEvent.BLOCK-DECREMENT: 代表点击滚动条下方引发块状下移的动作。 • AdjustmentEvent.BLOCK-INCREMENT: 代表点击滚动条上方引发块状上移的动作。 • AdjustmentEvent.TRACK:代表拖动滚动条滑块的动作。

More Related