已阅读5页,还剩152页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十一章 图形用户界面设计 1 几种布局管理器的使用 构造复杂布局 2 事件模型 AWT事件及其相应的监听器接口 3 各种AWT组件 按钮 复选框 复选框组 选择框 画布 标签和文本域 常用属性和方法的掌握4 各种AWT组件 列表 框架 面板和各种对话框 常用属性和方法的掌握 难重点 图形用户界面设计 11 1AWT组件概述11 2布局管理11 3事件处理 11 1AWT组件概述 早期的JDK版本中提供了Java抽象窗口工具集 AbstractWindowToolkit AWT 其目的是为程序员创建图形用户界面提供支持 AWT组件定义在java awt包中 包括组件类 组件布局类等 Java awt的继承关系 1 组件 组件 component 是构成图形用户界面的基本成分和核心元素 组件类 Component 是一个抽象类 是AWT组件类层次结构的根类 实际使用的组件都是Component类的子类 Component类提供对组件操作的通用方法 包括设置组件位置 设置组件大小 设置组件字体 响应鼠标或键盘事件 组件重绘等 2 容器 容器 container 是一种特殊组件 它能容纳其他组件 它在可视区域内显示其它组件 容器是组件 在容器之中还可以放置其它容器 可以使用多层容器构成富于变化的界面 3 窗口与面板 容器有2种 窗口 window 和面板 panel 窗口可独立存在 可被移动 也可被最大化和最小化 有标题栏 边框 可添加菜单栏 面板不能独立存在 必须包含在另一个容器中 面板没有标题 没有边框 不可添加菜单栏 一个窗口可以包含多个面板 一个面板也可以包含另一个面板 但面板不能包含窗口 窗口类Window和面板类Panel都是容器类Container的子类 4 框架与对话框 窗口类Window主要有2个子类 框架类 Frame 和对话框类 Dialog 框架 Frame 框架 frame 是一种带标题栏并且可以改变大小的窗口 应用程序中 使用框架作为容器 在框架中放置组件 框架类在实例化时默认是最小化的 不可见的 必须通过setSize 方法设置框架大小 通过setVisible true 方法使框架可见 Frame的构造方法 Frame的成员方法 对话框 dialog 对话框 dialog 也是一种可移动的窗口 它比框架简单 没有太多的控制元素 如最大化按钮 状态栏等 对话框不能作为应用程序的主窗口 它依赖于一个框架窗口而存在 当框架窗口关闭时 对话框也关闭 对话框类Dialog的构造方法必须声明对话框所依赖的框架窗口 例 创建窗口 importjava awt classFrmApp staticFramefra newFrame FrmApp publicstaticvoidmain Stringargs fra setSize 250 150 fra setLocation 100 200 fra setVisible true System out println State fra getState System out println Title fra getTitle System out println Visible fra isVisible 程序运行时 出现如图所示的窗口 并在屏幕上显示如下所示的文本信息 State 0Title FrmAppVisible true 5 标签 标签类 Label 组件用于显示一行文本信息 标签只能显示信息 不能用于输入 Label的构造方法 Label的成员方法 例 在窗口中建立1个标签 importjava awt classLabApp publicstaticvoidmain Stringargs Framefra newFrame LabApp Labellab newLabel 创建1个空标签fra setSize 250 150 lab setText Thisisalabel 为标签添加标题lab setAlignment Label CENTER lab setBackground Color white 引用Component类的方法设置标签背景颜色 lab setForeground Color black 引用Component类的方法设置标签标题颜色Fontfnt newFont Serief Font ITALIC Font BOLD 22 lab setFont fnt fra add lab fra setVisible true 程序运行时 出现如图所示的窗口 6 按钮 按钮是最常见的一种组件 用来控制程序运行的方向 用户单击按钮时 计算机将执行一系列命令 完成一定的功能 按钮通过java awt包的Button类创建 Button的构造方法 java awt Button的方法 例 在窗口中建立一个按钮 importjava awt classButtapp publicstaticvoidmain Stringargs Framefra newFrame ButtApp fra setSize 250 170 fra setLayout null 关闭页面设置Buttonbutt newButton click butt setSize 100 50 butt setLocation 75 60 fra add butt fra setVisible true 程序运行时 出现如图所示的窗口 7 文本编辑组件 文本编辑组件有文本行和文本区 文本行是一个单行文本编辑框 用于输入一行文字 文本行由java awt包中的TextField类来创建 TextField的构造方法 TextField的成员方法 例 创建文本行 importjava awt classTextApp publicstaticvoidmain Stringargs Framefra newFrame 文本框程序 TextFieldtxt1 newTextField 50 TextFieldtxt2 newTextField TextField 50 fra setBounds 0 0 300 200 fra setLayout null txt1 setBounds 50 50 130 20 设置文本框的大小txt2 setBounds 50 100 130 30 fra add txt1 fra add txt2 fra setVisible true 程序运行时 出现如图所示的窗口 11 2布局管理 Java提供了多种风格和特点的布局管理器 每一种布局管理器指定一种组件相对位置和大小布局 布局管理器是容器类所具有的特性 每种容器都有一种默认的布局管理器 11 2布局管理 在java awt包中共提供了5个布局管理器类 FlowLayoutBorderLayoutCardLayoutGridLayoutGridBagLayout每个类都是java lang Object类的子类 11 2 1BorderLayout类 BorderLayout 边布局 的布局策略是把容器内的空间划分为东 西 南 北 中5个区域 这5个区域分别用英文的East West South North Center表示 向容器中加入每个组件都要指明它放在容器的哪个区域 如果某个区域没有分配组件 则其他组件可以占据它的空间 BorderLayout类的构造方法 例 应用BorderLayout布局 在窗口中加入5个按钮 采用BorderLayout布局 importjava awt classBorLay publicstaticvoidmain Stringargs Framefrm newFrame BorderLayout BorderLayoutlayout newBorderLayout 5 7 frm setBounds 0 0 300 200 frm setLayout layout ButtonbutN butS butW butE butC butN newButton northbutton butS newButton southbutton butW newButton westbutton butE newButton eastbutton butC newButton centerbutton frm add butN BorderLayout NORTH frm add butS BorderLayout SOUTH frm add butW BorderLayout WEST frm add butE BorderLayout EAST frm add butC BorderLayout CENTER frm setVisible true 程序运行结果如图所示 11 2 2FlowLayout FlowLayout 流式布局 的布局策略提供按行布局组件方式 将组件按照加入的先后顺序从左向右排列 当一行排满之后转到下一行继续按照从左向右的顺序排列 组件保持自己的尺寸 一行能容纳的组件的数目随容器的宽度变化 FlowLayout类的构造方法 例 使用FlowLayout布局 importjava awt importjavax swing publicclassFlowLay publicstaticvoidmain Stringargs Framefrm newFrame BorderLayout FlowLayoutlayout newFlowLayout frm setBounds 0 0 200 200 frm setLayout layout Buttonbut1 but2 TextFieldtxt1 txt2 but1 newButton button1 but2 newButton button2 txt1 newTextField text1 10 txt2 newTextField text2 10 frm add but1 frm add but2 frm add txt1 frm add txt2 frm setVisible true 运行程序出现如图所示的界面 初始界面增大窗口宽度后的界面 11 2 3GridLayout GridLayout 网格布局 管理器将容器划分为大小相等的若干行乘若干列的网格 组件按照从左到右 从上到下的的顺序依此放入各网格中 每个组件占满1格 组件大小随网格大小变化 如果组件数比网格数多 系统将自动增加网格数 如果组件数比网格数少 未用的网格区空闲 GridLayout类的构造方法 例 使用GridLayout布局 importjava awt publicclassGridLay publicstaticvoidmain Stringargs Framefrm newFrame GridLayout GridLayoutlayout newGridLayout 2 2 定义2行2列的GridLayoutfrm setBounds 0 0 200 200 frm setLayout layout Stringnames butt1 butt2 butt3 butt4 for inti 0 i names length i frm add newButton names i frm setVisible true 运行程序出现如图所示的界面 使用AWT开发GUI程序需要4个步骤 选择一个合适的容器 Container 确定一种布局管理器 LayoutManager 添加各种组件 Component 进行事件处理 EventHandling 我们可以打个家居设计的比喻 首先要选择一套房屋 这里相当于AWT的容器概念 然后要对房屋进行整体布局设计 比如一共需要几个房间 每个房间的大小和尺寸等 这里相当于AWT的布局管理器概念 整体布局规划好之后 我们开始布置每个房间 将各种家具或电器设备 相当于AWT的组件 安放在合适的位置 最后是确保家具或电器能够正常工作 例如 当使用电视机遥控调节音量时 电视机会正常做出反应 这里相当于AWT组件的事件处理 11 3事件处理 上一节中的主要内容是如何放置各种组件 使图形界面更加丰富多彩 但是还不能响应用户的任何操作 要能够让图形界面接收用户的操作 就必须给各个组件加上事件处理机制 在事件处理的过程中 主要涉及三类对象 11 3事件处理 11 3 1委托事件模型 JDK1 1之后采用委托事件模型 delegationeventmodel 1 事件 事件 event 是指一个状态的改变 或者一个动作的发生 用户对界面操作在java语言上的描述 以类的形式出现 例如键盘操作对应的事件类是KeyEvent 单击一个按钮 将产生单击事件 单击窗口关闭按钮 产生窗口关闭事件 2 事件类 在Java中 用不同的类处理不同的事件 在java awt event包中定义了许多事件类 如单击事件类 ActionEvent 和窗口事件类 WindowEvent 3 事件源 事件由用户操作组件产生 被操作的组件称为事件源 事件源是事件发生的场所 通常就是各个组件 例如按钮Button 例如 用户单击一个按钮 产生单击事件 按钮则是事件源 用户单击窗口关闭按钮 产生窗口关闭事件 窗口组件是事件源 4 事件监听器 在图形界面程序中 不仅需要创建组件 而且还需指定组件所能响应的事件 以及该事件发生时需要执行的动作 语句序列 4 事件监听器 一个组件能响应哪些事件 响应事件后需执行的语句序列存放在什么位置 这些功能由事件监听器负责 为了实现此功能 在开发程序时 用户需要做以下2件事 向事件源注册事件监听器实现事件处理方法 5 事件运作流程 按照委托事件模型 事件运作流程如下 在程序中 实现事件监听器接口 实现接口中声明的所有抽象方法 向事件源注册事件监听器 程序运行过程中 用户在事件源上引发某种事件 执行某种操作 时 Java产生事件对象 事件源将事件对象传递给事件监听器 事件监听器根据事件对象的种类 调用相应的事件处理方法进行事件处理 6 确定事件监听器 在编写事件处理的程序代码时 首先必须确定事件源与事件监听器 事件源的选择通常比较容易 事件监听器必须是实现事件监听器接口的类对象 7 编写事件处理程序代码 在事件处理程序中 必须实现事件监听器接口中声明的事件处理方法 事件处理方法以事件对象作为参数 当事件源上发生事件时 产生的事件对象将以参数形式传递给事件处理方法 在事件处理方法中 可以访问事件对象的成员 例 处理按钮单击事件 创建一个窗口程序类 当用户单击窗口中的按钮时 将窗口的背景设置为红色 importjava awt importjava awt event classButtEventAppextendsFrameimplementsActionListener staticButtEventAppfrm newButtEventApp publicstaticvoidmain Stringargs frm setTitle ButtEventApp frm setSize 300 160 frm setLayout null Buttonbtn btn newButton push btn setBounds 120 80 60 30 btn addActionListener frm frm add btn BorderLayout CENTER frm setVisible true publicvoidactionPerformed ActionEvente frm setBackground Color red 例 利用内部类处理按钮单击事件 importjava awt importjava awt event classInnClassEvent staticFramefrm newFrame 内部类是在其它类的内部声明的类 包含内部类的类称为外部类 此时内部类成为外部类的成员 内部类具有成员的4种访问权限 也可以声明为static 本例程序的功能与上例相同 程序代码不同之处是采用内部类对象作为事件监听器 publicstaticvoidmain Stringargs frm setTitle ButtEventApp frm setSize 300 160 frm setLayout null Buttonbtn btn newButton push btn setBounds 120 80 60 30 btn addActionListener newInnCla frm add btn BorderLayout CENTER frm setVisible true staticclassInnClaimplementsActionListener publicvoidactionPerformed ActionEvente frm setBackground Color red 11 3 2事件类和监听器接口 1 事件类Java定义的多数事件类在java awt event包中 AWTEvent类是所有事件类的祖先类 它又继承了java util EventObject类 而EventObject类又继承了java lang Object类 Java awt event的继承关系图 AWT事件共有10类 可以归为两大类 低级事件和高级事件 java util EventObject类是所有事件对象的基础父类 所有事件都是由它派生出来的 AWT的相关事件继承于java awt AWTEvent类 这些AWT事件分为两大类 低级事件和高级事件 低级事件是指基于组件和容器的事件 当一个组件上发生事件 如 鼠标的进入 点击 拖放等 或组件的窗口开关等 触发了组件事件 高级事件是基于语义的事件 它可以不和特定的动作相关联 而依赖于触发此事件的类 如在TextField中按Enter键会触发ActionEvent事件 滑动滚动条会触发AdjustmentEvent事件 或是选中项目列表的某一条就会触发ItemEvent事件 低级事件ComponentEvent 组件事件 组件尺寸的变化 移动 ContainerEvent 容器事件 组件增加 移动 WindowEvent 窗口事件 关闭窗口 窗口闭合 图标化 FocusEvent 焦点事件 焦点的获得和丢失 KeyEvent 键盘事件 键按下 释放 MouseEvent 鼠标事件 鼠标单击 移动 高级事件 语义事件 ActionEvent 动作事件 按钮按下 TextField中按Enter键 AdjustmentEvent 调节事件 在滚动条上移动滑块以调节数值 ItemEvent 项目事件 选择项目 不选择 项目改变 TextEvent 文本事件 文本对象改变 2 事件监听器接口 Java中的每个事件类都有一个监听器接口 接口中声明了一个或多个抽象的事件处理方法 如果一个类实现事件监听器接口 其对象就可以作为对应事件的监听器 具备监视和处理事件的能力 事件监听器接口和事件监听器接口中的方法 AWT中组件和可触发的事件类 3 事件适配器类 Java提供了一种简便办法 为包含多个事件处理方法的每个事件监听器接口提供了一个抽象类 称为适配器 adapt 类 类名带有Adapter标记 每个适配器类实现一个事件监听器接口 用空方法体实现该接口中的每个抽象方法 例如 WindowAdapter类实现WindowListener接口 用空方法体实现WindowListener接口中声明的以下方法 windowClosing WindowEvente windowClosed WindowEvente windowOpened WindowEvente windowActivated WindowEvente windowDeactivated WindowEvente windowIconified WindowEvente windowDeiconified WindowEvente 监听器接口与对应的适配器类 4 注册事件监听器的方法 11 3 3处理ActionEvent事件 当用户单击按钮 Button 选择列表框 List 选项 选择菜单项 MenuItem 或是在文本行 TextField 输入文字并按下Enter键 便触发动作事件 ActionEvent 触发事件的组件将ActionEvent类的对象传递给事件监听器 事件监听器负责执行actionPerformed 方法进行相应的事件处理 11 3 3处理ActionEvent事件 ActionEvent类继承了EventObject类的一个常用的方法getSource 其功能是返回事件源 对象 名 ActionEvent类本身还定义了一些成员 如getActionCommand 其功能是返回事件源的字符串信息 例 处理ActionEvent事件 编程实现 窗口中有标题为button1和button2的2个按钮和1个标签 当单击任一按钮时 标签显示该按钮的标题 importjava awt importjava awt event classActEventextendsFrameimplementsActionListener staticActEventfrm newActEvent staticButtonbtn1 btn2 staticLabellbl publicstaticvoidmain Stringargs frm setTitle ActionEvent frm setSize 240 160 frm setLayout newFlowLayout btn1 newButton button1 btn2 newButton button2 lbl newLabel noclicking btn1 addActionListener frm btn2 addActionListener frm frm add btn1 frm add btn2 frm add lbl frm setVisible true publicvoidactionPerformed ActionEvente if e getSource btn1 lbl setText button1clicked elselbl setText button2clicked 运行程序 出现如图所示的界面 a 初始界面 b 单击第1个按钮后的界面 c 单击第2个按钮后的界面 11 3 4处理ItemEvent事件 当窗口中的选项组件Checkbox 选择框 和List 列表框 等被选择时 发生选项事件 itemevent Java用ItemEvent类处理选项事件 ItemEvent类事件的监听器必须实现ItemListener接口 实现其中声明的itemStateChanged 方法 publicvoiditemStateChanged ItemEvente 程序运行过程中 当用户选择选项组件时 该方法被执行 例 处理ItemEvent事件 编程实现 窗口中有标题为green和yellow的2个单选按钮和1个文本行 当选择任一单选按钮时 文本行中显示该单选按钮的标题 importjava awt importjava awt event classIteEventextendsFrameimplementsItemListener staticIteEventfrm newIteEvent staticCheckboxchb1 chb2 staticTextFieldtxt1 publicstaticvoidmain Stringargs frm setTitle ItemEvent frm setSize 240 160 frm setLayout newFlowLayout CheckboxGroupgrp newCheckboxGroup chb1 newCheckbox green chb2 newCheckbox yellow txt1 newTextField Noneisselected chb1 setCheckboxGroup grp chb2 setCheckboxGroup grp chb1 addItemListener frm chb2 addItemListener frm frm add chb1 frm add chb2 frm add txt1 frm setVisible true publicvoiditemStateChanged ItemEvente if e getSource chb1 txt1 setText greenisselected elseif e getSource chb2 txt1 setText yellowisselected 运行程序 出现如图所示的界面 a 初始界面 b 单击green后的界面 c 单击yellow后的界面 11 3 5处理TextEvent事件 当TextField或TextArea组件中的文本改变时 触发文本事件 TextEvent Java用TextEvent类处理该事件 TextEvent类事件的监听器必须实现TextListener接口 实现其中声明的textValueChanged 方法 publicvoidtextValueChanged TextEvente 程序运行过程中 当TextField或TextArea组件中文本改变时 该方法被执行 例 处理TextEvent事件 编程实现 窗口中有2个文本行 当向上面的文本行输入文本时 下面文本行中同时显示所输入的文本 importjava awt importjava awt event classTexEventextendsFrameimplementsTextListener staticTexEventfrm newTexEvent staticTextFieldtxt1 txt2 publicstaticvoidmain Stringargs frm setTitle TextEvent frm setSize 240 160 frm setLayout newFlowLayout txt1 newTextField 20 txt2 newTextField 20 txt1 addTextListener frm frm add txt1 txt2 setEditable false frm add txt1 frm add txt2 frm setVisible true publicvoidtextValueChanged TextEvente txt2 setText txt1 getText 运行程序 出现如图所示的界面 a 初始界面 b 在第1个文本行输入文本时的界面 11 3 6处理KeyEvent事件 当按下键盘中的任一键时 将触发键盘事件 keyevent Java用KeyEvent类处理该事件 KeyEvent类的成员方法 KeyListener接口的成员方法 例 处理TextEvent事件 编程实现 窗口中有1个文本行和1个文本区 当按下某字符时 在文本行中显示该字符 当键被按下事件发生时 在文本区显示被按下的字符 当键被释放事件发生时 在文本区显示被释放的字符 当键入字符事件发生时 在文本区显示被输入的字符 importjava awt importjava awt event publicclassKeysEventextendsFrameimplementsKeyListener staticKeysEventfrm newKeysEvent staticTextFieldtxf staticTextAreatxa publicstaticvoidmain Stringargs frm setTitle KeyEvent frm setSize 240 200 frm setLayout newFlowLayout txf newTextField 20 txa newTextArea 6 20 txa setEditable false txf addKeyListener frm frm add txf frm add txa frm setVisible true publicvoidkeyPressed KeyEvente txa setText txa append e getKeyChar ispressed n publicvoidkeyReleased KeyEvente txa append e getKeyChar isreleased n publicvoidkeyTyped KeyEvente txa append e getKeyChar istyped n 运行程序 出现如图所示的界面 a 初始界面 b 在文本行输入字符r时的界面 例 利用KeyAdapter类处理TextEvent事件 编程实现 窗口中有2个文本行 当键入某字符时 在第1个文本行中显示该字符 并利用KeyAdapter类处理键入字符事件 在第1个文本行中显示 xisentered 其中x表示被键入的字符 importjava awt importjava awt event publicclassKeysEvent2extendsFrame staticKeysEvent2frm newKeysEvent2 staticTextFieldtxt1 txt2 publicstaticvoidmain Stringargs frm setTitle KeyEvent frm setSize 240 130 frm setLayout newFlowLayout txt1 newTextField 20 txt2 newTextField 20 txt2 setEditable false txt1 addKeyListener newKeysAdapter frm add txt1 frm add txt2 frm setVisible true staticclassKeysAdapterextendsKeyAdapter publicvoidkeyTyped KeyEvente txt2 setText e getKeyChar isentered 运行程序 出现如图所示的界面 a 初始界面 b 在第1个文本行输入字符t时的界面 11 3 7处理MouseEvent事件 当按下鼠标键 鼠标指针进入或离开某一区域 或者移动 拖动鼠标时 触发鼠标事件 mouseevent Java用MouseEvent类处理该事件 MouseEvent类中成员方法 Java提供了MouseListener和MouseMotionListener接口 用来处理MouseEvent事件 MouseListener接口用来处理以下事件 鼠标指针进入某一区域按下鼠标键释放鼠标键鼠标单击 按下和释放鼠标键的整个过程 鼠标指针离开某一区域 MouseListener接口的成员方法 MouseMotionListener接口用来处理以下2个事件 鼠标在某一区域移动鼠标在某一区域拖动 按下鼠标键不放移动鼠标 处理这2个事件的监听器必须实现MouseMotionListener接口 MouseMotionListener接口的成员方法 例 利用MouseListener接口处理MouseEvent事件 编程实现 窗口中有2个文本区 当鼠标指针进入和离开第1个文本区时 在第2个文本区显示相应信息 当在第1个文本区单击鼠标 按下和释放鼠标键时 分别显示其事件及发生的位置信息 importjava awt importjava awt event publicclassMouEventextendsFrameimplementsMouseListener staticMouEventfrm newMouEvent staticTextAreatxa1 txa2 publicstaticvoidmain Stringargs frm setTitle MouEvent frm setSize 240 300 frm setLayout newFlowLayout txa1 newTextArea 5 30 txa2 newTextArea 8 30 txa2 setEditable false txa1 addMouseListener frm frm add txa1 frm add txa2 frm setVisible true publicvoidmouseEntered MouseEvente 鼠标进入事件处理 txa2 setText Mouseenterstxa1 n publicvoidmouseClicked MouseEvente 鼠标单击事件处理 txa2 append Mouseiscliskedat e getX e getY n publicvoidmousePressed MouseEvente 鼠标按键事件处理 txa2 append Mouseispressedat e getX e getY n publicvoidmouseReleased MouseEvente 鼠标键释放事件处理 txa2 append Mouseisreleasedat e getX e getY n publicvoidmouseExited MouseEvente 鼠标离开事件处理 txa2 append Mouseexitsfromtxa1 运行程序 出现如图所示的界面 a 初始界面 b 发生MouseEvent事件后的界面 例 利用MouseMotionListener接口处理MouseEvent事件 编程实现 窗口中有1个文本区和2个文本行 当鼠标在文本区内移动时 在第1个文本行显示移动信息 当鼠标在文本区内拖动时 在第1个文本行显示拖动信息 importjava awt importjava awt event publicclassMouEvent2extendsFrameimplementsMouseMotionListener staticMouEvent2frm newMouEvent2 staticTextAreatxa staticTextFieldtxt1 txt2 publicstaticvoidmain Stringargs frm setTitle MouEvent frm setSize 240 200 frm setLayout newFlowLayout txa newTextArea 5 30 txt1 newTextField 30 txt2 newTextField 30 txa setEditable false txa addMouseMotionListener frm frm add txa frm add txt1 frm add txt2 frm setVisible true publicvoidmouseMoved MouseEvente 处理鼠标移动事件 txt1 setText Mouseismovedintxa publicvoidmouseDragged MouseEvente 处理鼠标拖动事件 txt2 setText Mouseisdraggedintxa 运行程序 出现如图所示的界面 a 初始界面 b 发生MouseEvent事件后的界面 例 利用MouseMotionAdapter类处理MouseEvent事件 实现上例功能 importjava awt importjava awt event publicclassMouEvent3extendsFrame staticMouEvent2frm newMouEvent2 staticTextAreatxa staticTextFieldtxt1 txt2 publicstaticvoidmain Stringargs frm setTitle MouEvent frm setSize 240 200 frm setLayout newFlowLayout txa newTextArea 5 30 txt1 newTextField 30 txt2 newTextField 30 txa setEditable false txa addMouseMotionListener newMouMotionAdapter frm add txa frm add txt1 frm add txt2 frm setVisible true staticclassMouMotionAdapterextendsMouseMotionAdapter publicvoidmouseMoved MouseEvente 处理鼠标移动事件 txt1 setText Mouseismovedintxa publicvoidmouseDragged MouseEvente 处理鼠标拖动事件 txt2 setText Mouseisdraggedintxa 11 3 8处理WindowEvent事件 当创建窗口 将窗口缩小成图标 由图标转成正常大小 或关闭窗口时 触发窗口事件 windowevent Java用WindowEvent类处理该类事件 并提供了WindowListener接口 用来监听该类事件 WindowListener接口的成员方法 例 处理WindowEvent事件 编程实现 当窗口打开 关闭 缩小为图标和由图标转换成一般状态时 在屏幕上显示相应信息 importjava awt importjava awt event publicclassWinEventextendsFrameimplementsWindowListener staticWinEventfrm newWinEvent publicstaticvoidmain Stringargs frm setTitle MouEvent frm setSize 240 200 frm addWindowListener frm frm setVisible true publicvoidwindowClosing WindowEvente System out println windowClosing method System exit 0 publicvoidwindowClosed WindowEvente publicvoidwindowActivated WindowEvente publicvoidwindowDeactivated WindowEvente publicvoidwindowIconified WindowEvente System out println windowIconified method publicvoidwindowDeiconified WindowEvente System out println windowDeiconified method publicvoidwindowOpened WindowEvente System out println windowOpened method 程序运行过程中 单击最小化按钮使窗口缩小成图标 再单击缩小成图标的窗口 使其恢复到一般状态 最后再单击关闭按钮将窗口关闭 屏幕上的显示信息如图所示 11 4绘图 Java提供了绘图类Graphics 用来在组件上绘图 通过调用Graphics的方法可以绘制直线 圆 圆弧 任意曲线等图形 1 Graphics类 Graphics类提供了很多绘图方法 绘图所使用的坐标系与屏幕 窗口相同 水平方向是X轴 向右为正 垂直方向是Y轴 向下为正 坐标源点 0 0 位于屏幕的左上角 任一点 x y 的x坐标表示该点距坐标源点在水平方向的像素 y表示距坐标源点在垂直方向的像素 Graphics类的成员方法 2 在组件上绘图 在java awt Component类中声明了绘图方法paint 其声明如下 publicvoidpaint Graphicsg 2 在组件上绘图 在paint 方法中 通过Graphics对象g调用绘图方法 在组件上绘制图形 paint 方法的执行方式与普通方法不同 它不是由用户编写代码调用执行 而是由系统自动执行 程序运行过程中 当创建或刷新一个组件时 系统自动执行该组件的paint Graphicsg 方法 绘制相应图形 因此 一个类如果需要在组件上绘图 则该类必须声明为继承某个Java组件类 并且覆盖paint 方法 只要把绘图操作g xxx 放在此方法中即可 否则不能自动执行paint 方法 通常只在窗口和面板上绘制图形 3 Paint 执行的流程 程序在很多情况下都会执行paint 方法 一是在程序中执行repaint 方法 这时会自动调用内部的一个update 方法 先清屏 再重新执行paint 方法 另一种情况是用户使用程序时窗口由不可见到可见或窗口被其他窗口遮盖住一部分 然后其他窗口又移开时 Exposure 也会自动执行paint 方法 见后面例3 例1 绘图举例 编程实现 在窗口中绘制1条直线和1个矩形 并在矩形内显示字符串 Painting importjavax swing importjava awt publicclassPaintingextendsFrame publicPainting super Painting setSize 200 150 setVisible true publicstaticvoidmain Stringargs Paintingapp newPainting publicvoidpaint Graphicsg g setColor Color red g drawLine 50 50 150 50 g drawRect 50 70 100 50 Fontfnt newFont dialog Font ITALIC Font BOLD 15 g setFont fnt g drawString Painting 70 100 程序运行时 显示窗口如图所示 例2importjava awt publicclassTestDrawextendsPanel publicstaticvoidmain Stringargs Framef newFrame MyDrawing TestDrawmc newTestDraw f add Center mc f setSize 150 150 f setVisible true publicvoidpaint Graphicsg System out println repainted Fontf newFont TimesRoman Font BOLD 18 g setFont f 设置字体g draw
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机床装调维修工安全宣传考核试卷含答案
- 气体净化工岗位现场作业技术规程
- 染料生产工安全实操强化考核试卷含答案
- 人身损害赔偿协议书
- 2026年全球六大旅游趋势报告
- 四则运算探秘
- 第十三章 三角形全章知识清单10个知识点(必考点分类集训)(人教版2024)(原卷版)
- 福建省三明市某中学2024-2025学年七年级上学期期中道德与法治试题(含答案)
- 低空经济科普知识竞答考试题库(附答案)
- 《openEuler系统管理与服务部署》课件 -项目二 - 05-系统网络连接设置
- 精馏塔课件完整版本
- 部编七年级上册16《猫》导学案附答案
- 寄递企业禁毒培训
- 中国拱桥课件幼儿园
- 仓库出入库培训
- 26《西门豹治邺》 公开课一等奖创新教学设计
- JJF 2214-2025 机动车检测用气象单元校准规范
- 使用YOLOv8s技术进行锂电池射线缺陷检测的研究
- 直播保密协议书
- 丑小鸭儿童故事绘本课件
- 放射医学研究论文的范文
评论
0/150
提交评论