程序设计实用案例选讲(袁卫华)案例选讲第六次.ppt_第1页
程序设计实用案例选讲(袁卫华)案例选讲第六次.ppt_第2页
程序设计实用案例选讲(袁卫华)案例选讲第六次.ppt_第3页
程序设计实用案例选讲(袁卫华)案例选讲第六次.ppt_第4页
程序设计实用案例选讲(袁卫华)案例选讲第六次.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

Java图形编程(3),一、复习 二、知识点讲解: 1)布局管理器 2)GUI标准组件 3)Java的事件处理机制 三、小结和作业,1)图形用户界面各种元素和成分的分类,1.容器:是用来组织其他界面成分和元素的单元。 JFrame JPanel JScrollPane JApplet,一、 复习,2.控件组件 图形用户界面的最小单位,里面不能再包含其他的成分。 如命令按钮JButton,单行文本框JTextField等都是控件组件。 java中通常将容器和控件组件本身作为对象来表达。,3.用户自定义成分 主要包括绘制图形,设置字体Fonts类,设置颜色Color类,显示图像和实现动画效果等。用户自定义成分的主要作用是装饰和美化,不能响应用户的动作,没有交互功能。,javax.swing 包,常见容器,JFrame,JScrollPane,JPanel,1. 扩展 java.awt.Frame 类 2. 用于在 Swing 程序中创建窗口 3. 包含边框、标题和用于关闭和图标化窗口的按钮 4.默认情况下表现为一种不可视且最小化状态,1. 中间容器 2. 用于将较小的轻量级组件组合在一起 3. 与内容窗格相似,面板在默认情况下不透明,滚动条面板,管理视区、滚动条及可选的行和列的标题视区,知识点之一:容器组件,一、 复习,1.容器组件之JFrame 特征 JFrame组件描述的是一种带标题框,并可以改变大小的窗口。 JFrame组件的对象为一个JFrame窗口,默认情况下表现为一种不可视且最小化状态。 JFrame是Java Application程序的图形用户界面容器,可以被其他容器创建并弹出成为独立的容器。 JFrame是最顶层容器存在,不能被其他容器所包含。,知识点之一:容器组件,一、 复习,知识点之二:容器组件,1.Swing组件之JFrame 主要方法 dispose():在编写窗口关闭操作的代码时需要用到关闭JFrame的dispose( )方法,并回收创建窗口所使用的全部资源。 public void validate():验证此容器及其所有子组件。 使用 validate() 方法会使容器再次布置其子组件。已经布置容器后,在修改此容器中组件的时候(在容器中添加或移除组件,或者更改与布局相关的信息),应该调用上述方法。,一、 复习,知识点之一:容器组件,2.Swing容器组件之JPanel 特征 中间容器,用于将较小的轻量级组件组合在一起,与内容窗格相似,面板在默认情况下不透明。,一、 复习,3. Swing容器组件之JScrollPane 特征 管理视区、滚动条及可选的行和列的标题视区。,1.布局管理器负责确定组件在窗口中的位置和大小。 在Java里安置一个组件到一个窗体中去,有如下特点: 它是全代码的。 没有控制安放组件的“资源”。 组件被安放到一个被“布局管理器”控制的窗体中,由“布局管理器”根据add()方法来安放组件。 大小,形状,组件位置与其它系统的布局管理器显著的不同。 布局管理器使我们的小程序或应用程序适合窗口的大小. 如果窗口的尺寸改变,组件的大小、形状和位置都会改变。,二、 知识点讲解,知识点之二:布局管理器,2. java.awt包常用的五种布局编辑类 每个布局编辑类对应一种布局策略,分别是 FlowLayout:流式布局管理器 BorderLayout:边界布局管理器 GridLayout:网格布局管理器 CardLayout GridBagLayout,二、 知识点讲解,知识点之二:布局管理器,3.一个容器确定它的布局管理方式的步骤 首先创建一个布局管理器类的对象。 然后将此对象设置为自己的布局管理器。 setLayout(new FlowLayout();/ 设置为流布局方式 相当于执行下面两句代码: FlowLayout flout=new FlowLayout(); setLayout(flout); 如果容器没有设置布局编辑器,其中的对象会互相覆盖、遮挡,影响使用,所以必须为每个容器设置一个合适的布局编辑器。,二、 知识点讲解,知识点之二:布局管理器,1)流布局管理器FlowLayout FlowLayout是容器JPanel和JApplet默认的布局编辑策略。 按照从左至右,从上至下的顺序放置组件。 一行排满之后就下转到下一行继续从左至右排列。 每一行中的组件都居中排列。 setLayout()方法作用:设置容器的布局方式。,二、 知识点讲解,知识点之二:布局管理器,public class FlowLayout1 extends JFrame FlowLayout1() setLayout(new FlowLayout(); for(int i=0;i20;i+) add(new JButton(“Button“+i); setSize(300,300); setVisible(true); setLocation(500,200); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); public static void main(String args) new FlowLayout1(); ,二、 知识点讲解,知识点之二:布局管理器,1)流布局管理器FlowLayout,BorderLayout布局方式是JFrame,JDialog等容器的默认布局方式。这种布局方式将整个容器划分为四个边缘区和一个中央区。,BorderLayout.NORTH:将组件放在面板北侧。 BorderLayout.SOUTH:将组件放在面板南侧。 BorderLayout.EAST:将组件放在面板东侧。 BorderLayout.WEST:将组件放在面板西侧。 BorderLayout.CENTER:将组件放在面板的中央位置,二、 知识点讲解,知识点之二:布局管理器,2)边界布局管理器BorderLayout,add(BorderLayout.NORTH,new JButton(“North“); add(BorderLayout.SOUTH,new JButton(“South“); add(BorderLayout.EAST,new JButton(“East“); add(BorderLayout.WEST,new JButton(“West“); add(BorderLayout.CENTER,new JButton(“Center“);,二、 知识点讲解,知识点之二:布局管理器,2)边界布局管理器BorderLayout,BorderLayout布局方式中放置组件的特点 : 分布在北部和南部区域的组件将横向扩展至占据整个容器的长度。 分布在东部和西部的组件将伸展至占据容器剩余部分的全部宽度。 最后剩余的部分将分配给位于中央的组件。,二、 知识点讲解,知识点之二:布局管理器,2)边界布局管理器BorderLayout,BorderLayout布局方式中放置组件的特点 : 如果某个区域没有分配组件,则其他组件可以占据它的空间。 如果北部没有分配组件,则西部、东部和中部的组件将向上扩展到容器的最上方,如果西部和东部没有分配组件,则位于中央的组件将横向扩展到容器的左右边界。,二、 知识点讲解,知识点之二:布局管理器,2)边界布局管理器BorderLayout,注意问题 使用BorderLayout放置组件时,一定要指定组件放置的方向,如 add(BorderLayout.NORTH,new JButton(“North“); 否则默认情况下组件都放置在面板的中央,后面放置的组件会盖住前面放置的组件。,二、 知识点讲解,知识点之二:布局管理器,2)边界布局管理器BorderLayout,布局特点 网格布局GridLayout首先将窗口分为n行m列,然后按照从左至右,从上至下的方式放置组件。 布局步骤 (1) 创建GridLayout对象作为布局编辑器。 指定划分网格的行数和列数,并使用容器的setLayout( )方法为容器设置这个布局编辑器:setLayout(new GridLayout(行数, 列数)。 (2) 调用容器的方法add( )将组件加入容器。组件填入容器的顺序将按照第一行第一个、第一行第二个、第二行第一个最后一行最后一个进行。 每个网格中都必须填入组件,如果希望某个网格为空白,可以为它加入一个空的标签:add (new Label( )。,二、 知识点讲解,知识点之二:布局管理器,3)网格布局管理器GridLayout,GridLayout1()/ GridLayout1.java setLayout(new GridLayout(7,3); for(int i=0;i20;i+) add(new JButton(“Button“+(i+1); setSize(300,300); setVisible(true); setLocation(500,200); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ,二、 知识点讲解,知识点之二:布局管理器,3)网格布局管理器GridLayout,标签JLabel 按钮JButton 单行文本框JTextField 多行文本区JTextArea,二、 知识点讲解,知识点之三:组件,1.标签JLabel 文本显示,主要作用是进行信息说明。 创建标签 JLabel label1=new JLabel(“请输入您要显示的图像文件名“); 常用方法 setText(新字符串):修改标签上显示的文本。 getText( ):获得标签上的文本内容。 产生事件 Label不是事件源,不能引发事件。,二、 知识点讲解,知识点之三:组件,2.按钮JButton 创建按钮 JButton okBtn=new JButton(“OK”); 常用方法 getLabel( )方法:返回按钮的标签字符串。 setLabel(String s)方法:把按钮的标签设置为字符串s。 产生事件:ActionEvent动作事件,二、 知识点讲解,知识点之三:组件,3.文本框JTextField 创建文本对象 JTextField inputFld=new JTextField(20); 创建一个能容纳20个字符的文本框。 常用方法 getText():以字符串形式返回文本框中的内容。 setText(String str):将文本框中显示的内容设置为str。 setEditable(Boolean b):将文本区域的内容设置为可编辑的或者不可编辑的。 isEditable():判断当前的文本区域是否处于可编辑状态。,二、 知识点讲解,知识点之三:组件,3.文本框JTextField 常用方法 select(int start, int end):根据指定的起止位置选定一段文本。 selectAll( ):选定文本区框中的所有文本。 产生事件 ActionEvent 动作事件 用户在文本框中按回车键时触发ActionEvent事件。,二、 知识点讲解,知识点之三:组件,4.多行文本区JTextArea 创建多行文本区对象 JTextArea outputArea=new JTextArea(10,30); 创建一个10行30列的多行文本区。 常用方法 append(String s)方法:在当前文本区域已有文本的后面添加字符串参数s指定的文本内容。 insert(String s, int index)方法:将字符串s插入到已有文本的指定序号处。 其他方法同JTextField。,二、 知识点讲解,知识点之三:组件,4.多行文本区JTextArea 常用方法 append(String s)方法:在当前文本区域已有文本的后面添加字符串参数s指定的文本内容。,二、 知识点讲解,知识点之三:组件,if (e.getSource() = adds) result.append(“n“); result.append(“您单击了插入按钮,正在 执行插入新记录操作n“); ,1)Java的事件处理机制,1.委托事件模型 Java采用委托事件模型来进行事件处理,不同的事件由不同的监听者处理。 事件源:产生事件的组件。 鼠标,文本框,按钮,选择项目,菜单项目等产生各种操作的对象。 事件:即其所产生的动作状态。 用户执行的动作:单击鼠标,按按钮,选择项目,单击菜单条,在文本框中按下回车键等。,知识点之四:事件处理机制,三、知识点讲解,1)Java的事件处理机制,1.委托事件模型,知识点之四:事件处理机制,三、知识点讲解,1.委托事件模型 处理过程 如果事件源希望进行事件处理,需要向能够处理这种类型事件的监听者进行注册。 Button btn=new Button(“确定”); btn.addActionListener(this); 监听者可以是包容事件源的容器,也可以是另外的对象。,知识点之四:事件处理机制,public class GuessNumber extends JFrame implements ActionListener 类GuessNumber 是动作事件的监听者。,三、知识点讲解,1.委托事件模型 事件监听者必须实现相关接口,监听者需要对它所实现接口的所有抽象方法写出具体的方法体,对应事件源上发生事件的处理代码就写在这些方法体里。 如对JButton上发生的动作事件的处理代码应该写在JButton对象所注册的监听者的actionPerformed( )方法中。 当事件源上发生监听者可以处理的事件时,事件源把这个事件作为实际参数传递给监听者中负责处理这类事件的方法(委托),这个方法被系统自动调用执行后,事件就得到了处理。,知识点之四:事件处理机制,三、知识点讲解,2. 监听者是包容事件源的容器JFrame public class GuessNumber extends JFrame implements ActionListener JButton okBtn;/确定按钮 public void init() okBtn=new JButton(“确定“);/定义JFrame中包含的组件 okBtn.addActionListener(this);/注册动作事件 public void eventHandle() /触发动作事件时的处理过程 public void actionPerformed(ActionEvent e) if(e.getSource()=okBtn) /如果触发动作事件的事件源是确定按钮okBtn eventHandle(); ,知识点之四:事件处理机制,三、知识点讲解,3.actionPerformed()方法的执行流程,1.当事件源上发生监听者可以处理的事件时,如鼠标单击JButton按钮或者在JTextField中敲回车键。,2. 事件源JButton把这个事件(ActionEvent e)作为实际参数传递给事件监听器(类GuessNumber)中负责处理这类事件的方法(actionPerformed(ActionEvent e),一旦有参数传递到actionPerformed方法中,这个方法就被系统自动调用执行,事件就按照程序代码中定义的流程得到了处理。,三、知识点讲解,知识点之四:事件处理机制,4. AWTEvent类体系结构,知识点之四:事件处理机制,三、知识点讲解,5.AWTEvent需要注意的问题 java.awt.event包中定义了11个监听者接口,每个接口内部包含了若干处理相关事件的抽象方法。 MouseEvent类有两个监听者接口与之相对应 MouseListener接口 具体事件包括:MOUSE_CLICKED,MOUSE_ENTERED,MOUSE_EXITED,MOUSE_PRESSED,MOUSE_RELEASED MouseMotionListener接口 具体事件包括:MOUSE_DRAGGED,MOUSE_MOVED,知识点之四:事件处理机制,三、知识点讲解,5. AWTEvent需要注意的问题 一个事件类可能对应多个事件。 如KeyEvent类对应三个具体事件 KEY-PRESSED(键按下) KEY-RELEASED(键松开) KEY-TYPED(击键),知识点之四:事件处理机制,三、知识点讲解,6.事件监听器是一个内部类的情况,可以定义一个继承了ActionListener接口的内部类,作为一个事件监听器,定义类GuessNumber1时,不需要继承动作事件监听器接口ActionListener public class GuessNumber1 extends JFrame 定义好的组件添加事件监听器,同GuessNumber.java。 GuessNumber1() okBtn.addActionListener(new ActionEventHandler();/注册动作事件 在GuessNumber1类中定义一个继承了动作事件监听器接口ActionListener的内部类ActionEventHandler(自定义的类名),并在该类中实现接口ActionListener的方法actionPerformed()。,三、知识点讲解,6. 事件监听器是一个内部类的情况,可以定义一个继承了ActionListener接口的内部类,作为一个事件监听器,public class GuessNumber1 extends JFrame GuessNumber1() okBtn.addActionListener(new ActionEventHandler(); numJtf.addActionListener(new ActionEventHandler(); class ActionEve

温馨提示

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

评论

0/150

提交评论