Java网络程序设计(下)ppt.ppt

上传人:za****8 文档编号:6440815 上传时间:2020-02-25 格式:PPT 页数:243 大小:5.02MB
返回 下载 相关 举报
Java网络程序设计(下)ppt.ppt_第1页
第1页 / 共243页
Java网络程序设计(下)ppt.ppt_第2页
第2页 / 共243页
Java网络程序设计(下)ppt.ppt_第3页
第3页 / 共243页
点击查看更多>>
资源描述
Java网络程序设计 下 第7章图形用户界面GraphicsUserInterface 主要内容 图形用户界面的概念和特点Java中的AWT和Swing组件常用Swing组件图形用户界面的设计方法和步骤Java的事件处理机制窗口菜单的设计基本的图形绘制方法 教学目标 掌握常用Swing组件的功能和应用掌握Eclipse可视化开发环境下图形用户界面的设计方法理解Java的事件处理机制熟悉基本的图形绘制方法 7 1图形用户界面设计基础 图形用户界面 GraphicsUserInterface 简称GUI 是指以图形的方式实现人与计算机之间的交互 在该界面下用户往往只需通过单击 双击 拖曳鼠标和简单的文字键入就可以轻松地操作计算机完成任务 图形用户界面生动形象 操作直观简便 一 AWT与Swing Java类库中提供AWT AbstractWindowToolkit 抽象窗口工具集 和Swing两套组件是Java类库中提供的两类来实现图形用户界面 AWT由java awt包提供 Swing由javax swing包提供 其中均包含了用于设计图形用户界面的各种组件 布局管理器和事件类 Swing是Java语言提供的第二代设计工具 它以AWT为基础 提供了比AWT更多的特性和工具 用于建立更复杂的图形用户界面 现在常采用Swing组件来开发GUI应用程序 1 Swing组件的体系结构 基本组件Component 容器Container 2 Swing组件的分类 从功能上分为 容器和基本组件 容器又分为顶层容器和中间层容器 顶层容器 JFrame JDialog JApplet 用于构造图形用户界面的窗口 并容纳其它容器和组件 它们可以独立存在 中间层容器 JPanel JScrollPane JToolBar等 容纳其它组件 但是不能独立存在 需要添加到其它容器中 通常用来按功能组织基本组件 基本组件 按钮JButton 文本框JTextField等等 是图形用户界面的基本组成单位 不能独立存在 必须将其添加到一定的容器中 二 容器与布局管理器 容器用于容纳组件 布局管理器用来设置容器中各个组件的排列方式 1 顶层容器与窗口每一个Java的GUI程序都必须至少包含一个顶层容器组件作为窗口 Swing中最常用的顶层容器类 JFrame 用它创建的框架窗口可以独立存在 并且带有边框 标题及用于关闭和最大化 最小化窗口的图标按钮 创建一个框架窗口 importjavax swing publicclassJFrameDemoextendsJFrame publicJFrameDemo super JFrame窗口 setBounds 50 50 300 120 setDefaultCloseOperation EXIT ON CLOSE setVisible true publicstaticvoidmain String args JFrameDemof newJFrameDemo JFrame类常用的方法 voidsetLayout LayoutManagermanager viodadd Componentcomp voidsetBounds intx inty intwidth intheight voidsetTitle Stringtitle voidsetVisible Booleanb setDefaultCloseOperation EXIT ON CLOSE ContainergetContentPane 所列出的大部分方法也适用于其它容器和组件 2 布局管理器 布局管理器是java awt包中提供的专门用于设置容器中组件排列方式的类 常用的有FlowLayout BorderLayout和GridLayout等几种 每一种容器都有一个默认的布局管理器 通过setLayout方法可以改变容器的布局方式 流式布局举例 publicclassFlowLayDemoextendsJFrame privateJButtonmyButton1 myButton2 myButton3 myButton4 myButton5 publicFlowLayDemo FlowLayDemo类的构造方法super 流式布局 setBounds 50 50 300 120 setLayout newFlowLayout 设置窗口为流式布局setDefaultCloseOperation EXIT ON CLOSE setVisible true myButton1 newJButton 第一个按钮 生成按钮对象myButton2 newJButton 第二个按钮 myButton3 newJButton 第三个按钮 myButton4 newJButton 第四个按钮 myButton5 newJButton 第五个按钮 add myButton1 添加按钮到窗口上图7 4 a 流式布局add myButton2 add myButton3 add myButton4 add myButton5 publicstaticvoidmain String args FlowLayDemof newFlowLayDemo 边界布局举例 publicclassBorLayDemoextendsJFrame privateJButtonmyButton1 myButton2 myButton3 myButton4 myButton5 publicBorLayDemo super 边界布局 setBounds 50 50 300 120 setLayout newBorderLayout 设置窗口为边界布局setDefaultCloseOperation EXIT ON CLOSE setVisible true myButton1 newJButton 东边按钮 myButton2 newJButton 南边按钮 myButton3 newJButton 西边按钮 myButton4 newJButton 北边按钮 myButton5 newJButton 中间按钮 add East myButton1 添加按钮到窗口指定方位add South myButton2 add West myButton3 add North myButton4 add Center myButton5 publicstaticvoidmain String args BorLayDemof newBorLayDemo 网格布局举例 publicclassGridLayDemoextendsJFrame privateStringnames 按钮1 按钮2 按钮3 按钮4 按钮5 按钮6 publicGridLayDemo super 网格布局 setBounds 50 50 300 120 setLayout newGridLayout 3 3 设置三行三列网格布局setDefaultCloseOperation EXIT ON CLOSE setVisible true for inti 0 i names length i add newJButton names i 依次添加各个按钮 publicstaticvoidmain String args GridLayDemof newGridLayDemo null 自定义布局 也称精确布局 由用户自行设定容器中每个组件的具体位置和大小 利用以下两条语句实现自定义布局 容器对象名 setLayout null 将容器布局设为自定义布局方式组件对象名 setBounds x y width height 指定组件在容器中的位置和大小在Eclipse可视化编程环境下 VE 通常将容器的布局设置为null 以便灵活布局 三 初识事件及事件处理 图形用户界面中人机交互的实现是通过组件响应各种事件来实现的 事件 通俗的讲是指在GUI程序系统中用户按需要激发的某一动作 如按钮单击 鼠标移动等事件源 事件发生的对象 如上述的按钮 鼠标事件处理 可以简单理解为当某个事件发生时需要执行的动作 语句序列 四 图形用户界面的设计方法和步骤 1 图形用户界面的构成 组件布局管理器事件处理 GUI窗口的生成和其中组件排列问题 用户与程序之间的交互性问题 2 Eclipse可视化编程简介 在Eclipse中加装可视化编程插件VE VisualEditor 后就构成了可视化开发环境 其中核心的部分是可视化类库 VisualClass 可视化类是EclipseVE自带的已经编写好的标准类 用户可以直接使用 它是实现图形用户界面可视化设计的基础 Eclipse可视化开发环境提供了一种直观 高效的GUI开发平台 像窗口的创建 组件的添加等工作几乎不用设计者编写任何代码就轻松实现 Eclipse编辑器会根据设计者的操作自动生成软件框架代码 大大降低了图形用户界面开发的难度 3 VE环境下实现图形用户界面的步骤 创建窗口 新建一个继承自顶层容器的可视化类 指定窗口布局方式 一般设置为null 创建基本组件并添加到容器中 响应事件 为某些实现与用户交互的基本组件添加事件处理代码 五 案例7 1的实现 演示 第一步 创建窗口 生成GUI的软件框架代码 启动Eclipse 新建一个名为proj7的Java项目 在项目proj7中新建一个基于JFrame的可视化类ClinicSelfInquire 1 可视化界面设计区 是容纳和布局各个组件的地方2 JavaBeans视图区 以树形结构显示出当前窗口中所有组件及其包含关系3 属性视图 用于设置构成窗口的各个组件的属性值 五 案例7 1的实现 演示 第二步 设置窗口外观和布局方式 设置窗口的位置 大小 标题 五 案例7 1的实现 演示 第二步 设置窗口外观和布局方式 设置窗口布局为null 五 案例7 1的实现 演示 第三步 添加组件并设置属性 添加一个标签JLabel和4个命令按钮JButton 五 案例7 1的实现 演示 第三步 添加组件并设置属性 设置标签和按钮的相关属性 五 案例7 1的实现 演示 第四步 为命令按钮添加单击事件处理代码 五 案例7 1的实现 演示 在JavaBeans视图中JButton4的下面新增了一个actionPerformed方法 同时在getJButton4 方法中也新增了一段代码 privateJButtongetJButton4 if jButton4 null jButton4 addActionListener newava awt event ActionListener publicvoidactionPerformed java awt event ActionEvente System out println actionPerformed returnjButton4 将上述蓝色标明的代码改为语句 System exit 0 由Eclipse可视编程器自动生成的软件框架代码看似复杂 实际上是有规律可循 通常有 成员变量定义 通常会自动为每个组件 包括内容面板 定义一个成员变量 此外可根据处理的需要 由设计者手工添加一些成员变量的定义 main方法 通常声明一个主类的对象并使窗口可见 主类的构造方法 通常仅调用super 方法和初始化方法initialize 初始化方法initialize 通常设置程序运行后窗口上可见的信息 如窗口的位置 大小 标题等 每个组件对应的一个方法 如案例中的getJContentPane getJButton1 getJButton4 通常在getJContentPane 方法中会根据具体操作自动创建各个组件对象并添加组件到内容面板 方法getJButton1 getJButton4 中除了对按钮进行初始化外 往往需要设计者手工添加有关事件的处理代码 7 2Swing组件及其应用 案例7 2的效果 一 常用Swing组件 1 JLabel 标签标签用于在窗口界面上显示一行提示性或说明性的文字 标签只能显示信息 不能用于输入 JLabel类比较常用的方法有 StringgetText 获取标签上的文字voidsetText Stringtext 设置标签显示的文字为textvoidsetFont Fontf 设置标签文字的字体 一 常用Swing组件 2 JButton 按钮按钮是图形用户界面中最常见的组件 用来控制程序运行的方向 用户单击按钮时会产生ActionEvent事件 计算机将相应地执行一系列命令完成一定功能 JButton类比较常用的方法有 voidsetText Stringtext 设置按钮上的标识文字为textStringgetText 获得按钮上的标识文字 一 常用Swing组件 3 JTextField 文本框文本框是一个单行文本编辑框 用于接收用户输入的一行文字 也可以显示一行文字 JTextField类比较常用的方法有 StringgetText 获得文本框中的文本内容voidsetText Stringtext 设置文本框的文本内容 一 常用Swing组件 4 JTextArea 文本区文本区是一个多行文本编辑框 用于接收用户输入的多行文字 也可以显示多行文字 当文本区的内容装满时不会自动产生滚动条 需要将文本区组件添加到JScrollPane 滚动面板 上才能实现滚动条效果 JTextArea类具有上面列出的JTextField的相同方法 另外其比较常用的方法还有 StringgetSelected 获取被选中的文本voidappend Stringtext 在文本区尾部添加文本text 一 常用Swing组件 5 JRadioButton 单选按钮单选按钮只有 选中 和 未选中 两种状态 通常用一组单选按钮实现 多选一 的功能 在java中必须使用按钮组类 javax swing ButtonGroup 实现将多个单选按钮位于同一组中 注意 ButtonGroup仅仅是一个逻辑上的组件 在Palette组件板上并不存在该组件 因此需要自行定义ButtonGroup类的对象 并调用该类的add 方法将多个JRadioButton对象一一添加到ButtonGroup类对象中 JRadioBunon类比较常用的方法有 voidsetSelected booleanb 设置一个单选按钮的状态 b为true表明选中voidsetText Stringtext 设置单选按钮上显示的文字booleanisSelected 返回按钮的状态 如果是选中的则返回true 否则返回false 一 常用Swing组件 6 JCheckBox 复选框复选框也有 选中 和 未选中 两种状态 通常用一组复选框提供一组选项供用户选择 与单选按钮不同的是 在一组复选框中 可以同时选中多个复选框 也可以不选中任何一个复选框 JCheckBox类比较常用的方法基本上与JRadioButton类的相同 一 常用Swing组件 7 JList 列表框列表框能够容纳并显示一组选项 供用户从中选择一项或多项 但不能对其进行编辑 与文本区相似 列表框中的内容增多时不会自动产生滚动条 也需要通过JScrollPane 滚动面板 才能实现滚动条效果 JList类比较常用的方法有 JList 创建一个没有选项的列表框JList Vectorvect 创建一个列表框 其中的选项由向量表vect决定JList Objectitems 创建一个列表框 其中的选项由对象数组items决定voidsetSelectionMode intselectionMode 设置列表框支持单选还是多选voidsetVisibleRowCount intvisibleRowCount 设置列表框中可显示的行数ObjectgetSelectedValue 获取被选中项的内容intgetSelectedIndex inti 获取被选中项的序号 从0开始 没有选中时值为 1voidsetListData VectorlistData 设置列表框中的选项 参数是一个向量表 一 常用Swing组件 8 JComboBox 组合框组合框是向用户提供多种选项的组件 其通常的显示形式是右边带有下拉箭头的文本框 可以在其文本框中输人选项 也可以单击下拉箭头从显示的列表中进行选择 默认组合框是不能编辑的 需要通过setEditable true 设为可编辑 JComboBox类比较常用的方法有 JComboBox 建立一个无选项的组合框JComboBox Object items 创建一个组合框 其中的选项由对象数组items决定voidaddItem Objectobject 通过字符串类或其他类为组合框添加选项intgetSelectedIndex 获取被选中项的序号 从0开始 没有选中时值为 1ObjectgetSelectedItem 获得被选中项的内容 一 常用Swing组件 9 JScrollPane 滚动面板滚动面板是一个带滚动条的中间层容器 通常利用它为Swing组件中的文本区 JTextArea 列表 JLIst 等组件添加滚动条 具体操作方法 先从Palette组件板上选取一个JScrollPane组件 在设计区上画出适当大小的区域 然后再选取一个JTextArea或JLIst组件添加到该JScrollPane上 这样文本区或列表框就会带有滚动条了 一 常用Swing组件 10 JPanel 面板JPanel是 个无边框的中间层容器 使用面板的目的是为了在窗口上分层次 分区域管理各种组件 适合比较复杂的GUI 一个窗口中可以添加多个JPanel对象 JPanel类的最常用的方法是add 方法和setLayout 方法 分别用于添加组件 设置面板布局 二 案例7 2的实现与分析 演示 虽然案例7 2不论从界面元素的数量 种类还是所实现的功能都明显超过案例7 1 但其实现的步骤依然相同 特别是窗口外观及布局 组件添加及属性设置等都可以参照案例7 1 第一步 创建窗口 生成GUI的软件框架代码启动Eclipse 在项目proj7中新建一个基于JFrame的可视化类 类名 ClinicRegister 第二步 设置窗口外观和布局方式窗口位置及大小 300 300 700 420 窗口标题 儿科专家门诊挂号 布局方式 null第三步 添加组件并进行相关属性设置 图7 12 表7 2 第四步 根据程序初始运行要求手工添加部分代码 将两个单选按钮rdMale和rdFemale添加到按钮组 实现性别的 互斥 选择 必须用一个ButtonGroup类的对象组织起来才能实现 多选一 的效果 由于ButtonGroup是一个逻辑组件 为此必须编写按以下操作实现将多个单选按钮放到一个按钮组中 在类成员变量声明处定义一个ButtonGroup类的对象group privateButtonGroupgroup newButtonGroup 在成员方法getJContentPane 内找到以下两句 功能 添加单选按钮到内容面板 jContentPane add getRdMale null jContentPane add getRdFemale null 在它们的前面添加以下两条语句 功能 将单选按钮添加到按钮组对象group中 group add getRdMale group add getRdFemale 第四步 根据程序初始运行要求手工添加部分代码 在标签上显示系统日期 当天第一个挂号编号 形式为 年月日 num 为获取系统日期值 在类成员变量声明处定义如下几个静态成员变量 privatestaticCalendarcalendar newGregorianCalendar privatestaticintyear calendar get Calendar YEAR privatestaticintmonth calendar get Calendar MONTH 1 privatestaticintday calendar get Calendar DAY OF MONTH privateintnum 1 设置挂号编号的初始数值 为了在程序运行后就显示出系统日期和当天的第1个挂号编号 在窗口初始化方法initialize 中添加以下两句 lbDate setText year 年 month 月 day 日 在标签上显示当天日期lbRegNumber setText year month day 1 在标签上显示出第1个挂号编号 第四步 根据程序初始运行要求手工添加部分代码 设定专家级别 专家姓名两个组合框的初始值 级别为 教授 姓名要对应 在类成员变量声明处定义如下几个成员变量 StringexpRank 教授 副教授 StringexpName1 郑国辉 王静如 刘建业 教授姓名列表StringexpName2 傅红云 梁立新 黎维彬 副教授姓名列表 在专家级别组合框cbRank所对应的方法getCbRank 中找到语句 cbRank setVisible true 在该语句的前面添加如下循环语句 依次将字符数组expRank中的各项值添加到专家级别组合框cbRank中 for inti 0 i expRank length i cbRank addItem expRank i 第四步 根据程序初始运行要求手工添加部分代码 设定专家级别 专家姓名两个组合框的初始值 级别为 教授 姓名要对应 在专家姓名组合框cbName所对应的方法getCbName 中找到语句 cbName setVisible true 在该语句的前面添加如下循环语句 依次将字符数组expName1中的各项值添加到专家姓名组合框cbName中 for inti 0 i expName1 length i cbName addItem expName1 i 第五步 为有关组件添加事件处理代码 专家级别组合框cbRank的itemStateChanged事件处理当选择不同专家级别时 应同步改变专家姓名组合框中的值 并且挂号费也相应改变 挂号 按钮btnReg的单击事件ActionEvent处理 为 退号 按钮btnCan添加单击事件处理代码 为 退出 按钮btnExit添加单击事件处理代码详细代码见教材 7 3Java的事件处理机制 一 委托事件模型 当用户操作组件引发某个事件时 系统会生成相应事件类的对象 在该对象中封装了关于该事件的各种信息 比如事件发生的时间 事件源 事件类型等等 作为事件产生者的事件源 其本身并不直接负责处理来自它的事件 而是授权给特定的事件监听器对象来处理 事件监听器时刻监听着事件源上所发生的事件类型 一旦该事件类型与自己所负责处理的事件类型一致 就马上进行处理 常用事件类及其对应的监听器 在java awt even包中定义了许多不同的事件类 用来描述各种类型的用户操作 Java为每个事件类定义了一个相应的事件监听器接口 listenersinterinface 其中声明了事件处理的抽象方法 使用Java的委托事件模型进行事件处理的一般方法 对于某种类型的事件XXXEvent 要想接收并处理这类事件 必须定义相应的事件监听器类 该事件监听器类必须要实现与该事件相对应的接口 即XXXListener 声明了一个事件源对象后 必须为该类对象注册相应的事件监听器 采用addXXXListener XXXListener 方法来注册 二 案例7 2的中的事件处理的分析 以 专家级别 组合框的相关事件处理为例对于组合框JComboBox 当改变其中选项或选项发生改变时 将触发项目事件ItemEvent 该事件的监听器接口为ItemListener 接口中定义的方法是itemStateChanged 当ItemEvent事件触发时由事件监听器通知去执行itemStateChanged 方法中的语句序列 二 案例7 2的中的事件处理的分析 cbRank addItemListener newjava awt event ItemListener publicvoiditemStateChanged java awt event ItemEvente if cbRank getSelectedIndex 0 cbName removeAllItems for inti 0 i expName1 length i cbName addItem expName1 i lbFeeValue setText 20 if cbRank getSelectedIndex 1 cbName removeAllItems for inti 0 i expName2 length i cbName addItem expName2 i lbFeeValue setText 12 7 4窗口与菜单 案例7 3的效果 一 菜单的组成与菜单类 1 菜单的组成 2 菜单类 菜单栏类 JMenuBar 窗口中用于容纳菜单 JMenu 的容器 JFrame类提供了setJMenuBar 方法 用来将菜单栏放置于框架窗口上方 JMenuBar类提供的add 方法用来在菜单栏上添加菜单 一个菜单栏可以添加多个菜单 菜单类 JMenu 是一组菜单项 JMenuItem 的容器或另一个菜单的容器 每个菜单有一个文字标题 JMenu类提供的add 方法用来在菜单上添加菜单项或另一个菜单 如果一个菜单中加入了另一个菜单 则构成了多级菜单菜单项类 JMenuItem 菜单项 JMenuItem 是组成菜单的最小单位 菜单项实际上可看作另一种形式的按钮 在菜单项上可以注册ActionEvent事件监听器 当单击某一菜单项时 执行actionPerformed 方法 二 为窗口加入菜单 在窗口中加入菜单的一般步骤 首先将JMenuBar加入到指定的框架窗口上方 接着将JMenu加入到菜单栏中 最后将JMenuItem加入到JMenu中 为应用程序的窗口添加菜单 既可以采用完全手工编程的方式来实现 也可以在Eclipse的可视编程环境中直接用鼠标操作来完成大部分工作而不需要编写代码 要注意的是 不论采用哪里方式 JMenuBar必须添加到框架窗口上 而不能加在窗口的内容面板上 三 案例7 3的实现 演示 第一步 创建窗口 生成GUI的软件框架代码启动Eclipse 在项目proj7中新建一个基于JFrame的可视化类ClinicMenu 将ClinicMenu窗口的标题设为 儿科门诊医生诊疗操作 布局设为null 第二步 添加菜单栏 菜单和菜单项 在窗口上添加菜单栏 在菜单栏上添加菜单 设置菜单标题 在菜单上添加菜单项 设置菜单项标题依照上述方法和步骤继续在菜单栏jJMenuBar上添加 诊疗操作 打印 和 帮助 等三个菜单以及这三个菜单下所单包含的菜单项 即 诊疗操作 菜单下有 检查 诊断 两个菜单项 打印 菜单下有 处方 和 检查单 两个菜单项 帮助 菜单下有 诊疗操作向导 菜单项 三 案例7 3的实现 演示 第二步 添加菜单栏 菜单和菜单项 在菜单上添加菜单 实现多级菜单本案例的 诊疗操作 菜单中设有一个多级菜单 开处方 该菜单中有 中药处方 和 西药处方 两个菜单项 多级菜单的添加方法如下 首先在Palette面板中选择SwingMenu中JMenu组件 移动鼠标到JavaBeans视图中的菜单jMenu2上单击 在弹出的对话框中为该菜单对象取名为jMenu21 并将其标题设为 开处方 这样就实现了在菜单上添加菜单 然后按照前面介绍的方法在刚添加的菜单jMenu21上再添加两个菜单项jMenuItem23和jMenuItem24 三 案例7 3的实现 演示 第三步 菜单操作命令的实现以单击 病人资料 菜单下的 当前患者信息 菜单项为例 简单介绍菜单项的单击事件及其处理 新创建一个基于JFame类的框架窗口 类名为PatientInfo 布局设为null 对照右图在窗口上布局8个JLable组件 用于显示当前患者的相关信息 三 案例7 3的实现 演示 第三步 菜单操作命令的实现 为ClinicMenu窗口中的 当前患者信息 菜单项jMenuItem1添加单击事件处理代码 jMenuItem1 addActionListener newjava awt event ActionListener publicvoidactionPerformed java awt event ActionEvente PatientInfocurSuf newPatientInfo 1curSuf setVisible true 2 代码说明 1 构造一个PatientInfo类的对象curSuf 在这里curSuf实际上是图7 194所示窗口 2 显示 当前患者信息 窗口 7 5图形绘制 Java类库提供了许多表示和操作图形的类 其中绘图类Graphics是图形处理的基础 案例7 4的效果 7 5图形绘制 案例7 4的效果 一 Graphics类 Graphics类是java awt包中的一个类 用来在组件上绘图 通过Graphics类的对象调用各种绘图方法可以绘制直线 圆 圆弧 任意曲线等图形 1 Java的坐标系Java绘图所使用的坐标系与窗口相同 即坐标原点 0 0 位于窗口的左上角 水平方向向右为正 垂直方向向下为正 单位为像素 一 Graphics类 Graphics类是java awt包中的一个类 用来在组件上绘图 通过Graphics类的对象调用各种绘图方法可以绘制直线 圆 圆弧 任意曲线等图形 1 Java的坐标系Java绘图所使用的坐标系与窗口相同 即坐标原点 0 0 位于窗口的左上角 水平方向向右为正 垂直方向向下为正 单位为像素 一 Graphics类 2 Graphics类常用绘图方法voiddrawLine intx1 inty1 intx2 inty2 在点 x1 y1 和点 x2 y2 之间绘制一条直线voiddrawRect intx inty intw inth 绘制左上角位于点 x y 宽度和高度分别为w和h的一个矩形voiddrawOval intx inty intw inth 在左上角位于点 x y 宽度和高度分别为w和h的矩形内绘制一个内切椭圆voiddrawString Stringstr intx inty 从点 x y 处开始输出字符串strvoidsetColor Colorc 设置绘图的颜色为c 二 在组件上绘图 在java awt Component类中声明了一个paint 方法 其格式如下 publicvoidpaint Graphicsg 前面介绍的Graphics类的各种绘图方法只能在paint 方法中使用 在paint 方法中通过Graphics类的对象g调用各种绘图方法就可以在组件上绘制出各种图形 三 案例7 4的实现 1 绘制方法分析心电图是由一系列的波组所构成 每个波组代表着一个心动周期 一个波组主要包括P波 QRS波群 T波 通过对一个简化的心搏曲线上若干个关键点的测量 以P波的起点a的坐标 x y 为基准向右 向上下 分别得到P波 QRS波和T波各波段上若干关键点相对于a点的坐标 将这些坐标放到数组中 通过调用Graphics类的drawLine 方法依次画线就可以绘制出来 三 案例7 4的实现 2 案例的实现第一步 创建窗口 生成GUI的软件框架代码第二步 设置窗口外观第三步 补充定义若干个成员变量 重写paint 方法 在HeartBeatCurve类的成员变量定义处定义如下几个成员变量 用于描述曲线上的几个关键点的坐标 三 案例7 4的实现 P波起点a的坐标定位在 100 360 处起点intx 100 y 360 P波各关键点坐标intpr x x x 20 x 30 x 40 x 45 x 50 x 55 x 60 x 66 x 70 intpr y y y 14 y 20 y 23 y 24 y 23 y 22 y 19 y 10 y QRS波关键点坐标intqrs x x 70 x 78 x 90 x 92 x 95 x 97 x 100 终点intqrs y y y 174 y 10 y y 10 y 8 y T波关键点坐标intt x x 100 x 110 x 115 x 130 x 135 x 140 x 145 x 150 x 155 x 158 x 160 intt y y y 6 y 10 y 22 y 27 y 30 y 31 y 28 y 20 y 10 y 一个周期起点与终点间相差160像素 终点 起点 三 案例7 4的实现 重写paint 方法publicvoidpaint Graphicsg super paint g 调用父类构造方法 以便画背景g setColor Color red 设置绘图颜色为红色for intc 0 c 3 c 绘制3个周期 for inti 0 i pr x length 1 i 绘制P波 两点间一一画直线g drawLine pr x i c 160 pr y i pr x i 1 c 160 pr y i 1 for inti 0 i qrs x length 1 i 绘制QRS波g drawLine qrs x i c 160 qrs y i qrs x i 1 c 160 qrs y i 1 for inti 0 i t x length 1 i 绘制T波g drawLine t x i c 160 t y i t x i 1 c 160 t y i 1 g drawLine x y 58 x 500 y 58 画3条水平线 7 6本章小结 图形用户界面的设计涉及到组件 布局管理和事件处理等方面的知识 要熟悉常用组件的功能 常用方法以及常见事件 基于Eclipse可视编程环境开发一个图形用户界既简单直观 又大大降低了编程的复杂程度 应掌握其设计的一般步骤和方法 要设计出一个美观实用的GUI程序 可能会需要用到本书未提及的组件或方法 可自行查阅Java的API文档 第8章多线程程序设计 Concurrency 了解多线程的概念熟悉多线程的编程特点掌握Java语言中实现线程的两种方法 8 1线程的概述 早期在计算机上开发的程序大多是单线程的 就是一个程序只有一条从头到尾的执行线索 然而在现实生活中 很多的过程都具有多条线索同时动作的特性 例如 我们可以一边走路 一边接电话 两件事并行 在一台计算机上 也可以一边用文字编辑器进行文字输入排版 一边运行音乐播放器进行音乐欣赏 最大限度地利用CPU资源 要求程序设计者能写出可以多进程并行的程序 当某一线程的处理不需要占用CPU而只和I O OEMBIOS等资源打交道时 让其他需要占用CPU资源的线程有机会获得CPU资源 javaObjectsprovideawaytodivideaprogramintoindependentsections Eachoftheseindependentsubtasksiscalledathread andyouprogramasifeachthreadrunsbyitselfandhastheCPUtoitself 单线程程序 多线程程序 Inallcases threadprogramming Seemsmysteriousandrequiresashiftinthewayyouthinkaboutprogramming 改变您编程时的思维方式 Lookssimilartothreadsupportinotherlanguages sowhenyouunderstandthreads youunderstandacommontongue 通用的解决方式 DualCorePentiumProessor 进程和线程都是操作系统的概念 进程是应用程序的执行实例 每个进程是由私有的虚拟地址空间 代码 数据和其它各种系统资源组成 进程在运行过程中创建的资源随着进程的终止而被销毁 所使用的系统资源在进程终止时被释放或关闭 简单地说 把正在计算机中执行的程序叫做 进程 Process 而 线程 Thread 是进程中某个单一顺序的控制流 它记录了程序指令执行的踪迹 8 1 1线程和进程 Thread 线程1 CPU时间切片 线程的属性 线程体在Java中线程体是从Thread类继承的run 方法 或实现Runnable接口的类中的run 方法 当线程产生并初始化后 实时系统调用它的run 方法 run 方法内的代码实现所产生线程的行为 它是线程的主要部分 2 线程的生命周期 Start 3 可运行态 Runnable start 方法产生运行线程所必须的资源 调度线程执行 并且调用线程的run 方法 在这时线程处于可运行态 该状态不被称为运行态是因为此时的线程并不总是一直占用处理机 特别是对于只有一个处理机的PC而言 任何时刻只能有一个处于可运行态的线程占用处理机 Java通过调度来实现多线程对处理机的共享 如果线程已经创建而且调用了start 方法 那么线程进入可运行状态 可运行线程不一定正在运行 只是说明它拥有被调度的权利 Thread 线程的时间分配 基本线程Basicthreads Thesimplestwaytocreateathreadistoinheritfromjava lang Thread whichhasallthewiringnecessarytocreateandrunthreads ThemostimportantmethodforThreadisrun whichyoumustoverridetomakethethreaddoyourbidding Thus run isthecodethatwillbeexecuted simultaneously withtheotherthreadsinaprogram 你所需要的功能 与程序中的其他线程同时运行 Thread类封装了Java线程 通过继承Thread类 覆盖方法run 在创建的Thread类的子类中重写run 加入线程所要执行的代码即可创建一个线程 案例8 1 设想护士在值班时有为多个患者打针和换药等工作 通过Thread类继承创建InjectingThread打针类和MedicineThread换药类 利用其run 方法形成Inject和Medicine线程体 然后通过调用start 方法启动线程 在主函数中还设计了 值班 循环体 观察程序运行时的结果 护士值班的多线程程序 packagecha8 publicclassNursingThread publicstaticvoidmain Stringargs InjectingThreadInject newInjectingThread MedicineThreadMedicine newMedicineThread Inject start Medicine start for inti 1 i 6 i System out println 我在病房值班 护士值班的多线程程序2 classInjectingThreadextendsThread publicvoidrun for inti 1 i 6 i System out println this toString 我在给患者打针 classMedicineThreadextendsThread publicvoidrun for inti 1 i 6 i System out println this toString 我在给患者换药 重写run 护士值班的多线程程序 运行结果 使用Runnable对象创建线程 Runnable接口声明了一个方法run 通过执行Executor接口的类对象运行Runnable 该接口声明了一个exectue 方法 所有的执行器对象代表性地建立和管理线程组 也称为线程池 这些线程通过exectue 方法执行可运行对象 Thread还有另外三个构造函数 它们接收实现Runnable接口的对象 并把其run 方法作为线程体 举例2 跳动的小球 packagecha8 importjava applet importjava awt publicclassBouncingCircleextendsAppletimplementsRunnable intx 150 y 50 r 20 intdx 11 dy 7 Threadanimator volatilebooleanpleaseStop publicvoidpaint Graphicsg g setColor Color red g fillOval x r y r r r publicvoidanimate Rectanglebounds getBounds if x r dxbounds width dx 0 dx if y r dybounds height dy 0 dy x dx y dy x bounds width 20 repaint publicvoidrun while pleaseStop animate try Thread sleep 100 catch InterruptedExceptione publicvoidstart animator newThread this pleaseStop false animator start publicvoidstop pleaseStop true 第9章JavaApplet 教学目的 Java语言的程序有两种基本形式 一种使Application大程序 另一种是Applet小程序 通过本章的学习 使学生了解并掌握Applet的结构特点 实现方法 工作原理和运行方法 JavaApplet 什么是Applet Applet的执行Applet与Application的区别Applet的编写步骤Applet的原理Applet的结构HTML文件Applet程序中的多媒体应用 什么是Applet Applet就是使用Java语言编写的一段代码 它可以在浏览器环境中运行 它与Application的区别主要在于其执行方式的不同 Application是从其中的main 方法开始运行的Applet是在一般浏览器中运行的 必须创建一个HTML文件 通过编写HTML语言代码告诉浏览器载入何种Applet以及如何运行 代码嵌入 Applet中没有main方法作为Java解释器的入口 必须编写HTML文件 把该Applet嵌入其中 然后用appletviewer来运行 或在支持Java的浏览器上运行 举例如下 代码附后 MyFirstApplet java程序对应的HTML文件 MyFirstApplet htm importjava awt importjavax swing publicclassMyFirstAppletextendsJApplet publicvoidinit JPanelpanel JPanel getContentPane JLabellabel newJLabel 我的第一个JavaApplet SwingConstants CENTER panel add label Applet的执行 1 在dos下可以用bin文件夹下的AppletViewer执行Applet 1 编译java文件XXX javajavacXXX java 2 执行AppletAppletViewerXXX htmlAppletViewer是一个Java应用程序 它相当于一个小型的浏览器 它需要将Html文件名作为运行参数之一 运行时 将弹出一个类似浏览器的画面 使得Applet可以在其中运行显示 Applet的执行 2 此外 Applet可以在NetscapeNavigator HotJava McrosoftInternetExplorer等支持Java的网络的浏览器中运行 Applet的执行 3 i 编写Applet的java程序publicclassMyAppletextendsApplet publicvoidinit publicvoidstart publicvoidstop publicvoidpaint g 将该程序保存为 XXX java编译该文件得到XXX class文件 Applet的执行 4 ii 将Applet嵌入HTMLRunApplet将文件保存为 html文件 如 My html Applet的执行 5 Html中Applet标记的完整语法格式为 1 JavaApplet程序是在WWW浏览器环境下运行 即不是完整独立运行程序 2 运行JavaApplet程序的解释器不是独立的软件 而是嵌在WWW浏览器中作为浏览器软件的一部分 3 JavaApplet程序中不需要有main方法 但是JavaApplet程序的主类必须是类库中已定义好的类Applet或JApplet的子类 4 JavaApplet程序可以直接利用浏览器或AppletViewer提供的图形用户界面 而JavaApplication程序则必须另外书写专用代码来营建自己的图形界面 Applet与Application的区别 案例9 1 简易的网上心脏病自测 图9 1案例 简易的网上心脏病自测 效果 案例9 1 的实现 新建 VisualClass 打开JavaVisualClass对话框 在包名栏 录入package09 在 名称 栏输入新建Applet类名Heartdisease 在Style一栏选择Swing包 可以看到在超类一栏中出现了javax swing JApplet 表示在即将创建的类中将自动导入JApplet类 设置好后 点击 完成 即新建了类Heartdisease java 具体操作顺序和配置情况如图9 2所示 案例9 1 的实现 图9 2新建Applet 案例9 1 的实现 点击工具栏右边的下三角箭头 选择相应的控件添加到编辑器中 其添加和布局方法和第七章所讲的图形用户界面设计相同 该界面用到了三类组件 分别是3个标签 8个复选框与一个按钮 部分组件的编号 属性及其对应对象名称如表9 1所示 其它组件的属性设计及对象名称对应于图9 3可视化界面设计区和包资源管理器所示 根据表9 1和图9 3提供的信息设计好图9 3所示的界面 案例9 1 的实现 在按钮jButton上右击 选择Events actionPerformed 然后在actionPerformed方法中添加如下代码 publicvoidactionPerformed java awt event ActionEvente inta 0 if jCheckBox isSelected a a 1 if jCheckBox1 isSelected a a 1 if jCheckBox2 isSelected a a 1 if jCheckBox3 isSelected a a 1 if jCheckBox4 isSelected a a 1 if jCheckBox5 isSelected a a 1 if jCheckBox6 isSelected a a 1 if jCheckBox7 isSelected a a 1 if a 2 jLabel2 setText 即使只选了一项 也应该做一次心电图检查 elsejLabel2 setText 您必须到医院检查身体 看您的心脏是否有问题了 案例9 1 的实现 编好后 点击 运行 运行 出现如图9 3右下所示的 运行为 对话框 选择JavaApplet 单击 确定 出现如图9 1左图的运行结果 案例9 1没有使用HTML文件在Eclipse平台也正常运行了Applet 这是因为选择 运行 运行 菜单时 在打开的 运行
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!