




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
GUI用户图形界面,GUI含义,全称为:GraphicalUserInterface,用户图形界面,里面提供一些用来操作的窗口、菜单、按钮、工具栏和其他屏幕元素。Java里有两个包为GUI设计提供功能:AWT和Swing,AWT是早期版本,不能实现全部GUI设计功能,Swing对其进行改进,不但包含原来所有的部件,还具有更加丰富的部件和功能,AWT为Swing的基础。注意import语句引入。例子:创建一个窗口对象,向里面添加组件。演示TestFrame,GUI中的众多组件可以分为两类:基本组件:按钮、文本框、复选框等,这些都是java.awt.Component类或者其子类。容器:是一种特殊的组件,能够容纳其他组件,如窗口、对话框等,这些是java.awt.Container类或者其子类。Contain类是Component类的子类。演示5秒钟之后自动关闭窗口。,事件处理,当用户对组件进行操作(例如拖动、按下按钮等),这时就等于对应用程序进行各种操作。反过来,应用程序也通过GUI来收集用户对其的操作信息。当按下按钮对象,属于一个事件的发生,假如想要规定该事件发生会执行某种功能,则要编写相应的事件代码。,事件处理机制,事件:用户对组件的一个操作。事件源:发生事件的组件就是事件源。事件处理器:负责处理事件的方法。1、处理事件的方法是类中的成员方法,在事件监听器中,监听器必须先与事件源相关联,这样在事件发生后,监听器中的代码才能执行。相关联的这步叫做事件监听器的注册。2、外部动作作用到事件源。3、事件源产生一个事件对象。对象中存在事件的信息4、把事件对象传递给事件处理器,执行代码。,事件分类,按照产生事件的物理操作和GUI组件的表现效果可以分为:MouseEvent:该类对应着鼠标事件,鼠标按下、点击(按下后释放)WindowsEvent:该类对应窗口事件,包括点击关闭按钮,最小化最大化等。ActionEvent:动作事件,并不代表一个具体动作,如按下按钮,菜单被单击等都可以看做该类事件。(可以理解为一个动作导致某个组件本身最基本的作用发生了,这就是ActionEvent事件),事件监听器,一个事件监听器对象负责处理一类事件。一类事件的每一种发生情况,分别有监听器对象中的一个方法来具体处理。事件源和事件监听器对象中进行约束的接口类被称为事件监听器接口。事件监听器接口类名称与事件类名称是相对应的。(MouseEventMouseListener)在监听器接口中有很多方法,例如鼠标在组件中单击等方法,里面接受一个鼠标事件类的对象,假如想要在鼠标事件对象产生后执行某功能则可以定义一个类来实现鼠标事件监听器接口中的某个方法,然后下面写入实现功能的代码,处理事件,例子:实现关闭窗口的事件处理。假如像上面一样定义一个窗口。让其具有关闭窗口的功能。(这时注意对窗口关闭事件的代码编写)注意:1、怎样实现窗口关闭的代码,代码该写在哪里2、怎样把事件源(窗口)联系到事件监听器(或者接口)3、事件监听器的里面的代码又是怎样执行把窗口关闭的过程4、要用到事件监听器就要用到事件监听器接口,里面必须把接口的方法(里面有对窗口关闭的方法)都给实现,才能调用监听器接口中的代码(要实现接口中的方法,全部),所以可以定义一个类,让这个类实现接口中所有的方法,这样就可以在接口的关闭窗口方法中来填写实际的代码来让其执行功能了!演示窗口关闭,事件适配器,刚才的例子可以看出,要想要事件实现代码,那么先要注册事件监听器,而且还有事件监听器接口与之相关联,那么实现功能的方法在事件监听器接口里.所以要定义一个类来实现事件监听器接口,这样才实现功能代码.JDK中提供了大多数事件监听器接口的最简单的实现类,这些称之为事件适配器(Adapter).直接用事件适配器来处理事件,可以简化事件监听器的编写.事件适配器是与事件监听器接口相对应的,假如再想实现事件监听器接口,那么可以定义一个类去继承该接口对应的事件适配器,这样就可以实现接口了。但是毕竟事件适配器只是简单的实现接口,假如需要一些其他的方法中的代码,那么可让一个类不但继承适配器类,同时再定义那些其他方法来把原来适配器的这些方法覆盖掉,这样就能改变原来适配器定义的方法内容了。,上一个例子,点击关闭按钮就能退出.注意:定义一个类必须要实现事件监听器接口中的所有方法,但是既然有了事件适配器,而且适配器正好实现了接口(Window)中的7个方法(里面虽然没有代码,但是也叫实现),所以这时可以把新定义的那个类让其继承适配器类,其他6个方法都不用改,直接覆盖适配器类中那个windowClosing方法(在里面写入让其退出的方法就可以),WindowAdapter,接收窗口事件的抽象适配器类。此类中的方法为空.此类存在的目的是方便创建侦听器对象.所以自定义一个类让其继承WindowAdapter类,那么假如只需要关闭代码,那么其他六个方法都已经继承,那么只需要改写windowClosing方法代码就可以。演示修改窗口关闭。(使用事件适配器),灵活设计事件监听器类(稍微复杂),在上一个例子:事件监听器类MyWindowListener与产生组件类TestFram是两个不同的类,事件监听器类中要实现的代码所访问的对象正好是事件源。假如想让监听器类中的代码访问非事件源的组件,如何实现?思路:不用点击窗口的关闭按钮来关闭窗口(这时就不是触发事件源本身的事件),而是通过添加一个按钮组件,然后再通过点击按钮的事件来触发窗口的关闭(注意:窗口和按钮是两个不同的组件),思考问题:1、事件是发生在按钮组件上,但是退出代码要体现在窗口的操作中,必须要实现windowClosing方法,(注意:这时的事件发生的组件是按钮,所以需要注册的不再是Window的事件接口了,而是ActionListener)2、假如按照上面思路,定义一个类来实现ActionListener接口,然后再实现里面退出窗口的按钮可以不.,演示灵活运行事件监听器。但是注意:这样的代码太乱,要想整齐点,可以把生成按钮,注册按钮对应的事件监听器对象的代码都放在一个方法里,然后让TestFrame的对象调用这个方法.演示灵活应用事件监听器2,事件处理的多重运用,用户的一个操作,有可能触发两个事件的产生:例如,用户用鼠标按一个按钮,既触发了鼠标事件,又触发了按钮本身被点击的事件。所以设计思想为:程序应该根据实际需要来编写要实现的代码,所以根据实际需要来处理其中的一个事件或者是两个事件。想要处理两个事件就得注册两个事件监听器对象。一个组件一个动作可以产生多个不同类型的事件,所以它可以注册多个不同类型的监听器。一个事件监听器对象可以注册到多个事件源上,等于不同的事件源发生的同一事件都由一个对象统一来处理。,既要实现点击按钮会退出窗口,还要实现会打印出一句话.所以在按钮上就需要注册两个事件监听器对象,一个是处理鼠标事件,另一个是处理按钮的Action事件,所以处理两个监听器接口,实现里面需要编写代码的方法。,GUI图形操作,思考:假如想要在组件上进行画图、打印文字或显示图像等,组件本身是否提供该方法。(否)假如想要做怎么办,注意:组件提供一个getGraphics(),(从Component继承)该方法返回一个包含该组件屏幕外观信息的Graphics类对象,该类提供在组件绘制图形,打印文字,显示图像等方法。Graphics.drawLine(intx1,inty1,intx2,inty2):画直线,已x1,y1坐标开始,以x2,y2坐标结束。Graphics.drawString(Stringstr,intx,inty):输出一个矩形区域,里面包含String文本,矩形的左下角以(x,y)坐标开始。,String文本,(x,y),应用,想要在窗口中以鼠标按下的位置作为起始点,鼠标释放的位置作为终止点,在把鼠标释放时将直线画出,并在起始点和终止点打印出它们的坐标值。准备:1、准备好一个窗口作为画板.2、因为是用鼠标点击释放来确定直线两端的坐标并画直线,所以需要注册鼠标类的事件监听器!3、drawline方法为在方法里输入x,y坐标,然后以起始点和终点画出直线,那么本程序要求的是以鼠标按下和释放时鼠标所在的位置坐标为起始和终点,那么怎么把鼠标按下和释放时所在的坐标给输入到drawline方法里呢?可以在鼠标类监听器接口中实现鼠标点击和释放的两个方法:当鼠标点击时,得到x,y坐标作为起始点,当鼠标释放时,得到这时的x,y坐标,然后把起始坐标一起输入到drawLine()的参数里,这样,从两个坐标之间的直线就形成了!演示简单画直线。,写入坐标值可以调用Graphics中的drawString方法.注意,因为在鼠标释放时会产生直线,并且会显示出坐标值,那么在鼠标释放方法里写入如上的代码.演示画坐标直线,图像操作,Component类:该类为GUI组件中共同父类,其为抽象类,里面定义的方法都为作为一个GUI组件所应具备的基本功能.例如paint方法就为该类的方法,被其他具体组件类继承.getToolkit方法等.预备:paint(Graphicsg):绘制此组件的方法,是component类的子类都有的方法,当窗口从最大化,最小化状态还原,或者被其他窗口覆盖,或者自己在定制一些非标准的组件(非标准为不是系统自带的组件),系统都会自动重画标准组件的图形图象,而不会自动重画组件上设计者自己定制的图形.一般解决办法为重写paint.Graphics.drawImage(Imageimg,intx,inty)绘制当前可用的指定图像的指定区域,其中img是要显示的图像对象,x,y是图像显示的左上角的坐标.,实例,想创建一个窗口,然后让其显示出一个图像.演示图像操作1.,注意:在处理空指针异常后,程序虽然能够正常运行,但是图像并没有正常显示出来.窗体在初始化时也会被调用paint方法,这样drawImage()绘制的图像为非标准组件,所以被paint()擦除了.在窗口显示一个图片,这个属于自己去定制的图片,而不是系统原有的标准组件,这时系统会自动调用paint()(仅此一次!),擦除自己定制的图画,只留下标准的组件,要想继续保留自己定制的图片,必须重写paint(),并且在里面写入要画图片的方法代码,这样系统自动调用paint方法时就会实现里面显示图片的代码.解决办法:重写paint方法,并把插入图片的代码写在paint()里面,这样调用的时候会执行插入图片.演示图像操作完整.,Canvas类,该类是最简单和最基本的GUI的组件,该类对象代表一块空白的矩形区域,程序可以在该区域进行绘图,还可以捕获用户的操作,并产生相应的事件.Canvas的用法为:一般在用户自己定制具有GUI功能的类时,可以让该类继承Canvas,这样可以继承Canvas所有功能,然后把其他功能和外观设置所需的代码增加就可以了.注意:在绘制自定义部件外观时,必须要覆盖paint方法,否则又会被组件重绘.,Checkbox类,产生复选框和单选按钮的类.复选框:复选框按钮可以处于选中或不选中的状态,它们之间没有制约关系,可以同时选中多个.单选按钮:也可以处于选中或不选中状态,但是单选按钮组只能选中一个按钮.publicCheckbox(Stringlabel,booleanstate):该构造函数创建的是一个复选框,label是复选框旁边的说明文字,state是复选框是否默认被选中.publicCheckbox(Stringlabel,booleanstate,CheckboxGroupgroup):因为单选按钮必须是成组出现,所以在用该构造函数创建单选按钮组的时候就在后面加入所属组的参数,这个也表明创建的是单选按钮组.CheckboxGroup类对象指定了所属的组.,监听器注意事项,当用户选择某个按钮时会打印出不同的话演示复选框和单选按钮.怎样才能知道用户选的是哪个按钮,假如设计程序要求用户在选中某个按钮之后会产生一些功能,又该怎样去设置.注意:在用户选中某个按钮时会出现事件,事件为ItemEvent,该监听器接口为ItemListener.所以要实现该接口里面唯一的方法:itemStateChanged(),然后可以在实现方法时加入一些要实现功能的代码.,菜单,现实中常见的菜单.组成:菜单条、菜单、菜单项菜单条由顶层菜单组成,菜单项可以是普通菜单的下拉菜单的各项。生成菜单条的类为:MenuBar,生成菜单的类为:Menu,(这里注意:可以把生成的菜单都加入到菜单条里).生成菜单项的类为:MenuItem.菜单项一般是最后的一级菜单.,建立菜单的常规方法:首先建立MenuBar对象,然后建立Menu对象,最后产生MenuItem对象。添加过程:先把MenuItem对象添加到Menu对象中,然后把Menu对象添加到MenuBar中,最后把MenuBar通过Frame窗口显示出来.注意:Menu对象可以增加到另一个Menu对象中不?因为Menu类是MenuItem的子类,所以可以作为一个菜单项增加到另外一个Menu对象中.,实际例子,设计一个菜单如右图:注意:File菜单下面又包含菜单项New、Open、SaveQuit,其中Quit为复选菜单.File菜单里又包含一个菜单,为:print,其下级又有两个菜单:Preview、setting.演示:设计菜单.,菜单实现功能,单击菜单项并没有反映,因为并没有对ActionEvent事件进行处理,假如要对print菜单里的两个菜单项进行动作处理,分别点击两个菜单项都会打印出不同的话.因为点击菜单项会触发ActionEvent,所以定义一个类实现ActionListener就可以,并且要实现ActionListener里唯一的方法:actionPerformed方法,在里面写入触发菜单项事件所执行的代码getActionCommend()返回与此动作相关的命令字符串,这样可以返回菜单项中的字符串,然后比较并执行代码.演示功能菜单.,布局管理器,假如在程序中,以前添加的都是一个按钮,那么这个按钮布满全局,假如添加两个按钮会怎样?演示简单布局.这时注意:只显示一个按钮,究竟是Frame类只支持一个按钮?其实是布局上出了问题,没有安排好布局使得对于Frame类来说,默认的布局管理器是BorderLayout,BorderLayout把容器分成东、西、南、北、中5个区域,往窗口中添加组件的时候可以利用该默认布局管理器进行添加,在添加的时候写明位置,并且最多可以添加5个.演示默认布局管理器.,注意:1、所有按钮添加进去之后,调整大小,会发现:北与南的按钮高度是不变的,只能改变宽度.东与西按钮宽度不变,只能改变高度.那么假如改变大小时剩下的用中间按钮来填补.2、假如不在方位中写明方向,那么默认的加的是Center位置,假如删除某一个方位的按钮,那么剩下的位置就由中间的按钮填补.3、假如中间的按钮不定义,那么位置就为空,假如定义两个按钮但是不写方位的时候,都默认加到了中心位置,所以一个会把另一个给覆盖.,FlowLayout类,流布局类定义布局风格为:从左向右,从上到下的排列方式,假如第一行排不下,会自动换到下一行.演示FlowLayout,GridLayout类,该类可以把容器划分成平等的网格,无论你加入组件的大小如何,最后它都会平等的显示在网格中.通过GridLayout的构造函数可以规定列数和行数.演示:GridLayout.,CardLayout,CardLayout类的布局管理器可以实现将多个组件叠放在同一容器内,然后可以交替显示.只能看见最上面的一个.主要方法:API文档中:1、publicvoidprevious():翻转到前一张卡片.里面的参数为要作用的容器.2、publicvoidnext():翻转到下一张.3、publicvoidfirst():翻转到第一张.4、publicvoidshow(Contai
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 枣阳顶管施工方案公司
- 雕花蜡烛美术课件
- 殡葬行业生命教育
- 吐鲁番职业技术学院《钢琴基础(一)》2023-2024学年第一学期期末试卷
- 辽宁现代服务职业技术学院《传感器原理及应用》2023-2024学年第二学期期末试卷
- 苏州大学《化工仪表》2023-2024学年第二学期期末试卷
- 农田石灰改造方案范本
- 《正宗新疆棉花被》课件
- 债权诉讼方案范本
- 沈阳音乐学院《排水工程》2023-2024学年第一学期期末试卷
- 产品质量管理关键控制点分析
- 2025年上半年广东深圳市光明区建筑工务署招聘特聘专干一般专干7人重点基础提升(共500题)附带答案详解
- 2025届广东省高三一模生物学试卷(原卷版+解析版)
- 新工科背景下大学化学课程的创新与实践探索
- 转院转诊制度
- T-CAPT 014-2024 新闻行业 大规模预训练模型 语言模型安全性要求
- 2025年湖北省高考模拟检测卷(二)-解析卷
- 《卵石动物造型》游戏课件
- 2025年中职入团考试题型及答案
- 2025四川成都陆港枢纽投资发展集团限公司招聘人事专员1人自考难、易点模拟试卷(共500题附带答案详解)
- 湖北省部分普通高中联盟2023-2024学年高一下学期数学期中考试试卷(含答案)
评论
0/150
提交评论