1、博学谷让 IT 教学更简单,让 IT 学习更有效传智播客Java 基础入门教学设计课程名称: Java 基础入门 授课年级: 2014 年级 授课学期: 2014 学年第一学期教师姓名: 某某老师 2014 年 02 月 09 日博学谷让 IT 教学更简单,让 IT 学习更有效课题名称 第 9章 GUI 计划学时 6 课时内容分析GUI全称是 Graphical User Interface,就是应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其它各种图形界面元素。Java 中针对GUI设计提供了丰富的类库,这些类分别位于 java.awt和 javax.swing包中。本章针
2、对 AWT和 Swing进行详细的讲解。教学目标及基本要求要求学生了解 GUI开发的相关原理和技巧,掌握 AWT事件处理、布局管理器、AWT绘图,熟悉 Swing组件的使用。重点及措施 教学重点: AWT 事件处理、布局管理器、Swing 组件的使用难点及措施 教学难点:AWT 事件处理、布局管理器、Swing 组件的使用教学方式 教学采用教师课堂讲授为主,使用教学 PPT讲解教学过程第一课时(AWT 概述、事件处理机制、事件适配器、用匿名内部类实现事件监听事件处理)AWT 概述 AWT 组成AWT 是用于创建图形用户界面的一个工具包,它提供了一系列用于实现图形界面的组件。在 JDK 中针对每
3、个组件都提供了对应的 Java 类,如下图所示: Window Window 类是不依赖其它容器而独立存在的容器,它有两个子类,分别是Frame 类和 Dialog 类。如下图所示:博学谷让 IT 教学更简单,让 IT 学习更有效Frame 示例 Dialog 示例 PanelPane 容器只能存在其它容器(Window 或其子类)中,一个 Panel 对象代表了一个长方形的区域,在这个区域中可以容纳其它组件,下图是一个 Panel组件:事件处理机制事件处理机制专门用于响应用户的操作,在学习如何使用 AWT 事件处理机制之前,首先介绍几个比较重要的概念,具体如下所示: 事件对象(Event):
4、封装了 GUI 组件上发生的特定事件。 事件源(组件):事件发生的场所,通常就是产生事件的组件。 监听器(Listener):负责监听事件源上发生的事件,并对各种事件做出响应处理的对象(对象中包含事件处理器 )。 事件处理器:监听器对象对接收的事件对象进行相应处理的方法。监听器 ( 含处理器 )事件对象外部动作事件源 ( 组件 )2 . 触发事件源上的事件3 . 产生并传递事件对象4 . 接收事件对象 , 激活事件处理器 , 实现预定功能1 . 将监听器注册到事件源事件适配器JDK 提供了一些适配器类,它们是监听器接口的默认实现类,这些实现类中实现了接口的所有方法。程序可以通过继承适配器类来达
5、到实现监听器接口的目的。例如,定义一个继承适配器类 WindowAdapter 的类MyWindowAdapter,如果要实现关闭窗口的功能,需要对 windowClosing()方法进行重写。用匿名内部类实现事件处理实际开发中,经常通过匿名内部类来创建事件监听器对象,针对所发生的事件进行处理。例如,为窗口添加一个具有点击事件的按钮,该按钮用于退出程序,具体的实现代码如下所示:import java.awt.*;import java.awt.event.*;public class Example04 public static void main(String args) 博学谷让 IT
6、教学更简单,让 IT 学习更有效Frame f = new Frame(“我的窗体!“);f.setSize(400, 300);f.setLocation(300, 200);f.setVisible(true);Button btn = new Button(“EXIT“); / 创建按钮组件对象f.add(btn); / 把按钮对象加载到窗口上/ 用内部类的方式为按钮组件注册监听器btn.addMouseListener(new MouseAdapter() public void mouseClicked(MouseEvent e) System.exit(0););当按钮被点击时,会
7、把点击事件作为对象传递给事件监听器,作出退出程序的处理。第二课时(窗体事件、鼠标事件、键盘事件和动作事件、布局管理器)窗体事件当对窗体进行操作时,比如窗体的打开、关闭、激活、停用等,这些动作都属于窗体事件,JDK 中提供了一个类 WindowEvent 用于表示这些窗体事件。鼠标事件在图形用户界面中,用户会经常通过鼠标来进行选择、切换界面等操作,这些操作被定义为鼠标事件,其中包括鼠标按下、鼠标松开、鼠标单击等。鼠标事件使用 MouseEvent 类表示,处理鼠标事件需要通过实现MouseListener 接口定义监听器,也可以继承适配器 MouseAdapter 类来实现。键盘事件例如键盘按下
8、、释放等,这些操作被定义为键盘事件。键盘事件使用KeyEvent 类表示,处理键盘事件的监听器对象需要实现 KeyListener 接口或者继承 KeyAdapter 类。动作事件动作事件只是表示一个动作发生了,不需要关心使用哪种方式对文件进行关闭,只要是对关闭按钮进行操作,即触发了动作事件。动作事件用ActionEvent 类表示,处理 ActionEvent 事件的监听器对象需要实现ActionListener 接口。布局管理器组件不能单独存在,必须放置于容器当中,而组件在容器中的位置和尺寸是由布局管理器来决定的。每个容器在创建时都会使用一种默认的布局管理器,在程序中可以通过调用容器对象的
9、 setLayout()方法设置布局管理器,通过布局管理器来自动进行组件的布局管理。博学谷让 IT 教学更简单,让 IT 学习更有效 FlowLayoutFlowLayout(流式布局管理器)下,容器会将组件按照添加顺序从左向右放置。到达边界时,会自动将组件放到下一行的开始位置。FlowLayout 有三个构造方法,具体如下:方法声明 功能描述FlowLayout() 组件默认居中对齐,水平、垂直间距为 5 个单位FlowLayout(int align) 指定组件的对齐方式,水平、垂直间距为 5 个单位FlowLayout(int align,int hgap,int vgap) 指定组件的
10、对齐方式和水平、垂直间距下列是一个 FlowLayout 布局管理器的示例: BorderLayoutBorderLayout(边界布局管理器)将容器划分为五个区域,分别是东(EAST)、南(SOUTH)、西(WEST)、北(NORTH)、中(CENTER)。BorderLayout 布局的效果如下图所示。 GridLayoutGridLayout(网格布局管理器)使用纵横线将容器分成 n 行 m 列大小相等的网格,每个网格中放置一个组件。博学谷让 IT 教学更简单,让 IT 学习更有效 GridBagLayoutGridBagLayout(网格包布局管理器)与 GridLayout 布局管理
11、器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格。使用 GridBagLayout 布局管理器的关键在于 GridBagConstraints 对象,它是控制容器中每个组件布局的核心类。GridBagConstraints 的常用属性如下所示: gridx 和 gridy:用于设置组件左上角所在网格的横向和纵向索引。 gridwidth 和 gridheight:用于设置组件横向、纵向跨越几个网格。 fill:用于设置是否及如何改变组件大小。 weightx 和 weighty:设置组件在容器中的水平方向和垂直方向的权重。需要注意的是,如果希望组件的大小随
12、着容器的增大而增大,必须同时设置 GridBagConstraints 对象的 fill 属性和 weightx、weighty 属性。 CardLayout卡片布局管理器(CardLayout)将界面看做一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。第三课时( AWT 绘图、 JFrame、JDialog 和中间容器)AWT 绘图 Graphics 类在 java.awt 包中专门提供了一个 Graphics 类,它相当于一个抽象的画笔,其中提供了各种绘制图形的方法,使用 Graphics 类的方法就可以完成在组件上绘制图形。Graphics 的常用方法如下所示
13、: setColor()用于指定上下文颜色,方法中接收一个 Color 类型的参数。 setFont()用于指定上下文字体,方法中接收一个 Font 类型的参数。 drawRect()和 drawOval()方法用于绘制矩形和椭圆形的边框, fillRect()和 fillOval()用于使用当前颜色填充绘制完成的矩形和椭圆形。 drawString()用于绘制一段文本,第一个参数 str 表示绘制的文本内 容,第二个和第三个参数 x、y 为绘制文本的左下角坐标。博学谷让 IT 教学更简单,让 IT 学习更有效Swing 简介大部分的 Swing 组件都是 JComponent 类的直接或者间
14、接子类,而JComponent 类是 AWT 中 java.awt.Container 的子类,接下来通过下图来描述AWT 和 Swing 大部分组件的关联关系:JFrameJFrame 是一个独立存在的顶级窗口,不能放置在其它容器之中,Jframe支持通用窗口所有的基本功能,例如窗口最小化、设定窗口大小等等。通过一个案例演示 JFrame 的效果:public Example15()this.setTitle(“JFrameTest“);this.setSize(200, 300);/ 定义一个按钮组件JButton bt = new JButton(“按钮“);/ 设置流式布局管理器thi
15、s.setLayout(new FlowLayout();/ 添加按钮组件this.add(bt); / 设置点击关闭按钮时的默认操作this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);运行结果:博学谷让 IT 教学更简单,让 IT 学习更有效JFrame 类和 Frame 类最大的区别在于, JFrame 类提供了关闭窗口的功能。JDialogJDialog 对话框可分为两种:模态对话框和非模态对话框。所谓模态对话框是指用户需要等到处理完对话框后才能继续与其它窗口交互,而非模态对话框允许用户在处理
16、对话框的同时与其它窗口交互。Jdialog 常用的构造方法如下所示:方法声明 功能描述JDialog(Frame owner) 创建非模态的对话框JDialog(Frame owner,String title) 创建具有指定标题的非模态对话框JDialog(Frameowner,boolean modal) 创建一个有指定模式的无标题对话框中间容器中间容器不能单独存在,只能放置在顶级窗口中。常见的中间容器有两种: Jpanel:它是一个无边框,不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是 FlowLayout。也可以使用 JPanel 带参数的构造函数或者它的 setLayou
17、t()方法为其制定布局管理器。 JscrollPane:JScrollPane 是一个带有滚动条的面板容器,而且这个面板只能添加一个组件,如果想往 JScrollPane 面板中添加多个组件,应该先将组件添加到 JPanel 中,然后将 JPanel 添加到 JScrollPane 中。第四课时(文本组件、按钮组件、JcomboBox、菜单组件)文本组件 JTextComponent文本组件用于接收用户输入的信息或向用户展示信息,其中包括文本框(JTextField)、文本域(JTextArea)等,它们都有一个共同父类JtextComponent。JtextComponent 提供了文本组件
18、常用的方法,如下表所示:方法描述 功能说明String String getText() 返回文本组件中所有的文本内容String getSelectedText() 返回文本组件中选定的文本内容void selectAll() 在文本组件中选中所有内容void setEditable() 设置文本组件为可编辑或不可编辑void setText(String text) 设置文本组件的内容void replaceSelection(String content) 用给定的内容替换当前选定的内容博学谷让 IT 教学更简单,让 IT 学习更有效 JTextFieldJTextField 称为文本框
19、,它只能接收单行文本的输入。创建一个文本框,示例代码如下:inputField = new JTextField(20);获取输入的文本信息,示例代码如下:String content = inputField.getText();将输入的文本域内容置为空,示例代码如下:inputField.setText(“); JTextAreaJTextArea 称为文本域,它能接收多行的文本的输入,使用 JTextArea 构造方法创建对象时可以设定区域的行数、列数。创建一个文本域,示例代码如下:chatContent = new JTextArea(12, 34);设置文本域不可编辑,示例代码如下:
20、chatContent.setEditable(false);向文本域添加内容,示例代码如下:chatContent.append(“向文本域添加内容“);按钮组件 JCheckBoxJCheckBox 组件被称为复选框,它有选中(是)/未选中(非)两种状态。如果复选框有多个,则用户可以选中其中一个或者多个。创建 JCheckBox 对象的常用的构造方法如下表所示:方法描述 功能说明JCheckBox() 创建一个没有文本信息,初始状态未被选中的复选框JCheckBox(String text)创建一个带有文本信息,初始状态未被选定的复选框JCheckBox(String text,boole
21、an selected)创建一个带有文本信息,并指定初始状态(选中/未选中)的复选框。 JRadionButtonJRadioButton 组件被称为单选按钮,与 JCheckBox 复选框不同的是,单选按钮只能选中一个。创建 JRadioButton 对象常见的构造方法如下所示:方法描述 功能说明JRadioButton () 创建一个没有文本信息、初始状态未被选中的单选JRadioButton (String text) 创建一个带有文本信息、初始状态未被选定的单选框JRadioButton (String text,boolean selected)创建一个具有文本信息,并指定初始状态(
22、选中/未选中)的单选框JComboBoxJComboBox 组件被称为组合框或者下拉列表框,它将所有选项折叠收藏在博学谷让 IT 教学更简单,让 IT 学习更有效一起,默认显示的是第一个添加的选项。当用户点击组合框时,会出现下拉式的选择列表,用户可以从中选择其中一项并显示。JComboBox 常用方法有: void addItem(Object anObject):为组合框添加选项 void insertItemAt(Object anObject,int index):在指定的索引处插入选项 Objct getItemAt(int index):返回指定索引处选项,第一个索引为 0 int
23、getItemCount():返回组合框中选项的数目 Object getSelectedItem():返回当前所选项 void removeAllItems():删除组合框中所有的选项 void removeItem(Object object):从组合框中删除指定选项 void removeItemAt(int index):移除指定索引处的选项 void setEditable(boolean aFlag):设置组合框的选项是否可编辑,aFlag为 true 则可编辑,反之则不可编辑菜单组件 下拉式菜单创建下拉式菜单需要使用三个组件:JMenuBar(菜单栏)、JMenu(菜单) 和JM
24、enuItem(菜单项),以记事本为例,这三个组件在菜单中对应的位置如下图所示:(1)JMenuBar:JMenuBar 表示一个水平的菜单栏,它用来管理菜单,不参与同用户的交互式操作。(2)JMenu:JMenu 表示一个菜单,它用来整合管理菜单项。(3)JMenuItem :JMenuItem 表示一个菜单项,它是菜单系统中最基本的组件。 弹出式菜单在 Java 的 Swing 组件中,弹出式菜单用 JPopupMenu 表示。JpopupMenu通过调用 add()方法添加 JMenuItem 菜单项,但它默认是不可见的,如果想要显示出来,则必须调用它的 show(Component i
25、nvoker,int x,int y)方法。第五课时上机练习 1 总结,测试题)1、 总结本章内容2、 通过题库发放相关测试题,检查学生掌握情况。3、 上机练习:针对本章中需要重点掌握的知识点,以及在程序中容易出博学谷让 IT 教学更简单,让 IT 学习更有效错的内容进行练习,通过上机练习可以考察同学对知识点的掌握情况,对代码的熟练程度。上机一:(考察知识点为 AWT 绘图)请按照以下要求设计一个验证码窗口要求如下:1)创建一个类 YzmPanel 绘制验证码,验证码背景为灰色,背景上干扰点为蓝色,验证码为绿色。2)验证码为四个整数阿拉伯数字。3)将 YzmPanel 画板放在 Frame 窗口中央。第六课时上机练习 2 总结,测试题)上机一(考察知识点为 Swing 组件的使用)请按照以下要求设计一个用户聊天界面要求如下:1)用 Swing 组件设计界面,创建类 Swing2)创建一个文本域,一个文本框,一个按钮(发送) ,文本框前有描述文字:“我要发言” 。3)文本域不可编辑,点击发送按钮可将文本框中的内容复制到文本域中4)如果文本框中内容为空,提示“发送信息不能为空,请重新输入”思考题和习题见教材第 9 章后的习题教学后记