欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    JAVA语言与编程第9章AWT组件及应用.ppt

    • 资源ID:89860933       资源大小:232.50KB        全文页数:32页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    JAVA语言与编程第9章AWT组件及应用.ppt

    Java实用教程(第3版)第第9章章 AWT组件及应用组件及应用T9.1 AWT容器容器T9.2 布局管理器布局管理器T9.3 事件处理机制事件处理机制T9.4 Graphics类类T9.5 AWT绘图绘图T9.6 综合实例综合实例Java实用教程(第3版)第第9章章 AWT组件及应用组件及应用AWT中的图形元素可以分为两类:基本组件Component和容器Container。图9.1列出了AWT中的主要相应包及类之间的层次关系。图图9.1AWT的的类层类层次次结结构构Java实用教程(第3版)9.1 AWT容器容器9.1.1 Window和和FrameWindow是不依赖于其他容器而独立存在的容器。Window有两个子类:Frame和Dialog。Frame带有标题,而且可以调整大小。Dialog可以被移动,但是不能改变大小。Frame有一个构造方法Frame(String title),通过它可以创建一个以参数为标题的Frame对象。Frame的add()方法向容器中加入其他组件。当Frame被创建后,它是不可见的,必须通过以下步骤使Frame成为可见的。(1)调用setSize(int width,int height)显式设置Frame的大小,或者调用pack()自动确定Frame的大小。pack()方法确保Frame容器中的组件与窗体相适用的大小。(2)调用setVisible(true)方法使Frame成为可见。Java实用教程(第3版)9.1.1 Window和和Frame【例例9.1】创建一个Frame对象并使用Frame类的常用方法。MyFrame.javapackage org.awt;import java.awt.*;public class MyFramepublic static void main(String args)Frame fr=new Frame();fr.setTitle(This is a Frame);/设定窗体标题fr.setSize(400,300);/设定窗体的宽度为400,高度为300fr.setBackground(Color.green);/设定窗体的背景色为绿色fr.setLocation(300,500);/设定窗体左上角的初始位置为(300,500)fr.setResizable(false);/设定窗体为不可调整大小fr.setVisible(true);/将窗体设为可见Java实用教程(第3版)9.1.1 Window和和Frame程序运行结果如图9.2所示。图图9.2 一个一个FrameJava实用教程(第3版)9.1.2 Panel面板Panel是一个通用的容器,它没有边框或其他可见的边界,不能移动、放大、缩小或关闭,不能单独存在,只能存在于其他容器(Window或其子类)中。一个Panel对象代表一个区域,在这个区域中可以容纳其他的组件。Panel的add()方法向Panel中添加组件。如要使Panel成为可见的,必须通过Frame或Window的add()方法把Panel添加到Frame或Window中。Frame的setBounds(int x,int y,int width,int height)方法移动组件并调整其大小,由x和y指定左上角的新位置,由width 和height指定新的大小。【例例9.2】创建4个Panel对象,并将它们添加到窗体上。Java实用教程(第3版)9.1.2 Panel程序运行结果如图9.3所示。图图9.3 窗体加窗体加载载PanelJava实用教程(第3版)9.2 布局管理器布局管理器h1.流式布局管理器流式布局管理器FlowLayout是把组件从左向右、从上向下,一个接一个的放到容器中,组件之间的缺省间隔(水平和垂直)为5个像素,缺省的组件对齐方式为居中。组件的大小由布局管理器根据组件的最佳尺寸来决定。lFlowLayout的构造方法如下:FlowLayout(int align,int hgap,int vgap)功能:参数align用来决定组件在每行中相对于容器的边界的对齐方式。可选值有:FlowLayout.LEFT(左对齐)、FlowLayout.RIGHT(右对齐)和FlowLayout.CENTER(居中对齐)。参数hgap和参数vgap分别设定组件之间的水平和垂直间隙。Java实用教程(第3版)9.2 布局管理器布局管理器h2.边界布局管理器边界布局管理器BorderLayout是Window、Frame、Dialog的缺省布局管理器,它将容器分成五个区域来安排组件:North、South、East、West、Center。lBorderLayout的构造方法如下:BorderLayout(int hgap,int vgap)参数hgap和vgap分别设定组件之间的水平和垂直间隙。对于采用BorderLayout的容器,当它用add()方法添加一个组件时。可以同时指定组件在容器中的区域,如下所示。void add(Component comp,Object constraints)这里的constraints是String类型,可选值为BorderLayout提供的5个常量。下面的代码把Button放在Frame的东边区域,如下所示。Frame fr=new Frame();fr.add(new Button(bt),BorderLayout.EAST);如果不指定add()方法的constraints参数,在默认的情况下把组件放在中区域。下面的代码向Frame的中间区域加入两个Button,但只有最后加入的Button是可见的,如下所示,Frame fr=new Frame();fr.add(new Button(b1);fr.add(new Button(b2);fr.setSize(200,200);fr.setVisible(true);Java实用教程(第3版)9.2 布局管理器布局管理器h3.网格布局管理器网格布局管理器GridLayout是将容器分成一个个格子,按行依次排列组件,各组件大小相同。lGridLayout的构造方法如下:GridLayout(int rows,int cols,int hgap,int vgap):rows代表行数,cols代表列数,hgap和vgap规定网格之间的水平和垂直间隙。h4.卡片布局管理器卡片布局管理器CardLayout将界面看成一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。lCardLayout的构造方法:CardLayout(int hgap,int vgap)参数hgap表示卡片和容器的左右边界之间的间隙,参数vgap表示卡片和容器的上下边界的间隙。对于采用CardLayout的容器,当用add()方法添加一个组件时,需要同时为组件指定所在卡片的名字,如下所示:void add(Component comp,Object constraints)Java实用教程(第3版)9.3 事件处理机制事件处理机制在Java中,监听器对象是一个实现了特定监听器接口的类的实例。事件源是一个能够注册监听器对象并发送事件对象的对象。用户对组件的一个操作,称之为一个事件,当事件发生时,事件源将事件对象传递给所有注册的监听器。监听器对象将利用事件对象中的信息决定如何对事件做出响应。在图9.4中,Frame是一个事件源,它可以触发键盘事件和鼠标事件等。键盘事件对应一个键盘监听器,它会在键按下和释放时响应。Frame注册了键盘监听器,所以它触发的键盘事件将被处理。对于Frame触发的鼠标事件,由于没有注册相应的鼠标监听器,所以这种事件不会被处理。图图9.4 Frame的触的触发发事件事件Java实用教程(第3版)9.3.1 AWT事件与监听器事件与监听器每个具体的事件都是某种事件类的实例,事件类包括:ActionEvent、ItemEvent、MouseEvent、KeyEvent和WindowEvent等。事件类的类层次结构如图9.5所示。图图9.5 事件事件类类的的类层类层次次结结构构Java实用教程(第3版)9.3.1 AWT事件与监听器事件与监听器要处理一个对象所产生的事件,首先必须注册该对象的监听者。包按照不同的事件类型定义了11个监听器接口,每类事件都有对应的事件监听器,监听器是接口,接口中定义了事件发生时可调用的方法,一个类可以实现监听器的一个或多个接口。表9.1列出了AWT事件的监听器接口。Java实用教程(第3版)9.3.2 窗口事件窗口事件WindowEvent类对应窗口事件,包括用户单击了关闭按钮,窗口得到与失去焦点,窗口最小化等。窗口事件对应的事件监听器是WindowListener。【例例9.3】一个数如果恰好等于它的因子之和,这个数就称为“完数”。运行程序,在文本框中输入数字1000,按下回车符,则将1000之内的是完数的及构成完数的因子写入到文本区里,如图9.6所示。图图9.6 求求1000之内的完数之内的完数Java实用教程(第3版)9.3.3 鼠标事件鼠标事件MouseEvent类对应鼠标事件,包括鼠标按下、释放、单击等事件。鼠标事件对应的事件监听器是MouseListener。【例例9.4】设计一个窗口,上面有一个按钮。当鼠标移到按钮上时,立即隐藏该按钮;当鼠标离开按钮时,显示该按钮。运行程序,当鼠标单击“隐藏按钮”时,按钮不可见,鼠标移开时,按钮又显示在窗体上,如图9.7所示。图图9.7 隐隐藏按藏按钮钮Java实用教程(第3版)9.3.4 键盘事件键盘事件在Java中与键盘事件有关的接口和类有KeyListener、KeyAdapter及KeyEvent。其中KeyListener和KeyAdapter用于监听键盘事件的发生并将其传送到相应的事件处理方法中去,而KeyEvent主要用于提供事件发生时的有关信息。KeyListener接口能够监听的键盘事件有3种:键按下(Pressed)、键释放(Released)及键的按下并释放(Typed),相应的事件处理方法如下:(1)public void keyTyped(KeyEvent e):当键盘上的一个键被按下并释放后该方法被调用(2)public void keyPressed(KeyEvent e):当键盘上的一个键盘被按下后该方法被调用(3)public void keyReleased(KeyEvent e):当键盘上的一个键盘被释放时该方法被调用Java实用教程(第3版)9.3.4 键盘事件键盘事件KeyEvent类中常用的方法如下:(1)public int getKeyCode():返回键盘事件中相关键的整数类型键码(2)public char getKeyChar():返回键盘事件中相关键的字符类型键码,例如,对于Shift+a键返回的字符是A。(3)public static String getKeyText(int keyCode):返回一个描述由参数int keyCode指定的键的字符串,如HOME、F1 或A等。(4)public String paramString():返回一个标识该事件的参数字符串。【例例9.5】创建了一个文本框和4个文本区,文本框用来接受键盘的输入并注册了键盘事件监听器在前3个文本区中分别显示在Pressed、Released、Typed方法中相关联的键所对应的字符。Java实用教程(第3版)9.3.4 键盘事件键盘事件运行程序,在文本框中首先依次输入a、b、c、d、e字符后,再依次输入两个功能键“Delete”、“Home”,这些字符和功能键将出现在相应的文本区中,如图9.8所示。图图9.8 使用使用键盘键盘事件事件Java实用教程(第3版)9.3.5 内部类实现监听接口内部类实现监听接口【例例9.6】Frame采用FlowLayout布局,在Frame中加入了3个Button,分别在三个Button按钮上注册时间监听器。单击left按钮,按钮以左对齐排列,单击center按钮,按钮以居中排列,单击right按钮,按钮以右对齐排列。运行程序,单击“left”按钮,按钮以左对齐排列,单击“center”按钮,按钮以居中排列,单击“right”,按钮以右对齐排列。程序的运行结果如图9.9所示。图图9.9内部内部类实现监类实现监听接口听接口Java实用教程(第3版)9.3.6 类自身实现监听接口类自身实现监听接口同样可以用类的自身实现监听接口。由于Java支持一个类实现多个接口,因此类可以实现多个监听接口,类中的组件将类的实例本身注册为监听器。【例例9.7】求所有满足条件的四位数,它是11的倍数,且第3位数加上第2位数等于第4位数。运行程序,单击“求四位数”按钮,则符合要求的四位数显示在文本区中。程序运行结果如图9.10所示。图图9.10 求四位数求四位数Java实用教程(第3版)9.3.7 外部类实现监听接口外部类实现监听接口用外部类来实现监听接口,优点是可以使处理事件的代码与创建GUI界面的代码分离;缺点是在监听类中无法直接访问组件。在监听类的事件处理方法中不能直接访问事件源,必须通过事件类的getSource()方法来获得事件源。【例例9.8】在窗体上创建三个文本框,两个文本框用于运算对象,另一个用于存放计算结果,下拉列表框存放四则运算符号。运行程序,在文本框中输入5 和6,单击“=”按钮,两数相乘的积存放在第三个文本框中,程序的运行结果如图9.11所示。图图9.11 计计算两数相乘的算两数相乘的积积Java实用教程(第3版)9.3.8 采用事件适配器采用事件适配器由于监听器实际上就是实现了相应接口的类,而接口一般要求实现许多方法,如接口WindowListener中有7种方法,并不是所有方法都是需要的,若实现该接口则要求实现其所有的抽象方法。为了简化,Java语言为一些接口提供了事件适配器(Adapter)。事件适配器是抽象类。通过继承事件适配器,重写需要的方法,不用的方法无须重写。Java.awt.event包中提供了以下几个事件适配器:ComponentAdapter组件适配器ContainerAdapter 容器适配器FocusAdapter焦点适配器KeyAdapter键盘适配器MouseAdapter 鼠标适配器MouseMotionAdapter 鼠标移动适配器WindowAdapter 窗口适配器Java实用教程(第3版)9.3.8 采用事件适配器采用事件适配器【例例9.9】请编写一个程序,在窗口上显示三个按钮,按钮上的标题分别是:红色、绿色、蓝色。当按下标题为“红色”的按钮时,则三个按钮的标题都变成红色;而按下标题为“绿色”的按钮时则全部变成绿色;按下标题为“蓝色”的按钮时则全部变成蓝色。运行程序,单击标题为“绿色”的按钮,三个按钮都变成绿色,运行结果如图9.12所示。图图9.12 改改变变按按钮钮的的颜颜色色Java实用教程(第3版)9.4 Graphics类类Graphics类代表画笔,提供了一系列的方法来实现基本图形元素的绘制,只要组合使用这些图形绘制方法,就可以得到想要的复杂图形。实际上Graphics类是一个抽象类,它提供的方法大部分也是抽象的方法,常见的有:ldrawLine(int x1,int y1,int x2,int y2):画一条直线。ldrawString(String str,int left,int bottom):写一个字符串。ldrawImage(Image image,int left,int top,ImageObserver observer):画一个图片。ldrawRect(int left,int top,int width,int height):画一个矩形。ldrawOval(int x,int y,int width,int height):画一个椭圆。lfillRect(int left,int top,int width,int height):填充一个矩形。lfillOval(int x,int y,int width,int height):填充一个椭圆。l可以为Graphics对象设置绘图颜色和字体属性,方法为:lsetColor(Color color):设置画笔的颜色。lsetFont(Font font):设置画笔的字体。Java实用教程(第3版)9.4 Graphics类类【例例9.10】测试Graphics类的特性,在窗体上画出一条直线,并在窗体上显示直线两端的坐标位置。运行程序,出现一个窗体,在窗体中用鼠标任意画出一条直线,则在窗体上显示按下时的鼠标的横坐标值和纵坐标值,即直线的起始坐标。鼠标释放时,同样在窗体上留下鼠标的横坐标值和纵坐标值,即直线的终点坐标,如图9.13所示。图图9.13 Graphics类类的使用的使用Java实用教程(第3版)9.5 AWT绘图绘图在AWT中有两种绘画操作:系统触发的绘画和程序触发的绘画。在系统触发的绘画操作中,系统需要一个组件显示它的内容,通常是由于下列原因:l组件第一次在屏幕上显示。l组件的大小改变了。l组件显示的内容受损需要维护(如先前挡住组件的物体移走了,于是组件被挡住的部分暴露出来。)程序触发的绘画操作是组件自己决定要更新自身的内容,因为组件内部的状态改变了。比如,检测到鼠标按钮已经按下,那么它就需要去画出按钮被按下时的样子。对于这两种触发的绘图要求,AWT都是利用“回调”机制来实现绘制。这意味程序应该在一个特定的可重写的方法中放置那些绘制组件自身的代码,在需要绘制的时候,工具包就会调用这个方法。这个可重写的方法在中声明:public void paint(Graphics g)Java实用教程(第3版)9.5 AWT绘图绘图程序必须使用Graphics(或者其派生类)对象进行绘制,并且可以根据自己的需要任意改变Graphics对象的属性值。这里是一个回调绘制的例子,在组件的内部画一个实体圆。public void paint(Graphics g)/根据组件的大小,动态计算圆的尺寸信息Dimension size=getSize();/直径int d=Math.min(size.width,size.height);int x=(size.width-d)/2;int y=(size.height d)/2;g.fillOval(x,y,d,d);g.setColor(Color.black);g.drawOval(x,y,d,d);Java实用教程(第3版)9.5 AWT绘图绘图一般情况下,程序应该避免把绘制代码放在AWT绘制的“回调”机制作用范围之外,被调用的位置上。这是因为可能在不适宜进行绘制的时候,却调用了那些绘制代码,例如,在组件变为可见之前。为了能够让程序触发绘制操作,AWT提供了repaint()方法,这样程序就可以提出一个异步的绘画请求:public void repaint()那么由程序触发的绘制过程是:(1)程序确定是一部分还是全部组件需要重画以反映内部状态的改变。(2)程序调用组件的repaint(),该方法向AWT登记了一个异步的请求,当前组件需要重画。(3)AWT促使事件分派线程去调用组件的update()方法,可能会将多个repaint()请求合并为一个请求,调用一次update()方法。(4)如果组件没有重写update()方法,update()的默认实现会清除部件背景,然后只是简单地调用paint()。应用程序触发的绘制操作不能直接调用paint()。Java实用教程(第3版)9.5 AWT绘图绘图以上3个方法的调用关系为:repaint()调用update(),update()调用paint(),如图9.14所示。图图9.14 paint()、update()与与repaint()Java实用教程(第3版)9.5 AWT绘图绘图【例例9.11】测试AWT的绘图机制。运行程序,如图9.15所示。图图9.15 AWT绘图绘图Java实用教程(第3版)9.6 综合实例综合实例这个程序灵活运用AWT的各种事件处理。这里,在“注册”按钮和“确定”按钮上注册类自身的监听器,在“查看”按钮上注册鼠标适配器,在“关闭”按钮和“取消”按钮上注册内部类监听器。【例例9.12】运用AWT的各种事件处理机制实现学生信息的注册和查看。运行程序,单击“注册”按钮,出现学生注册窗口,如图9.16所示,在文本框中输入学生学号和学生姓名,单击“确定”按钮,完成学生信息的注册。图图9.16 学生信息注册学生信息注册Java实用教程(第3版)9.6 综合实例综合实例多次单击“注册”按钮,完成多个学生的信息注册。单击“查看”按钮,已经注册的学生信息将出现在文本区域中,如图9.17所示。图图9.17 学生信息学生信息查查看看

    注意事项

    本文(JAVA语言与编程第9章AWT组件及应用.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开