第8讲 图形界面_第1页
第8讲 图形界面_第2页
第8讲 图形界面_第3页
第8讲 图形界面_第4页
第8讲 图形界面_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

Java语言概述,1,学习导读首先,我们学习一些基本的图形编程知识,包括窗口的显示及外观设置、在窗口中显示文字和图像等;接下来,介绍Java的事件处理机制,例如如何在程序中接收并处理如键盘按键和鼠标点击等“事件”;最后,系统地介绍图形用户界面中常用组件的用法,如布局管理器、文本框、复选框、菜单、对话框等。,Java语言概述,2,教学重点与难点(书上7.17.2),图形用户界面简介awt和Swing的特点。GUI类的类别*一些帮助类简单的图形用户界面第一个图形用户界面(JFrame)*框架类的主要方法框架的继承结构中位置及外观在框架中显示信息在框架中显示文本和图形(Container类和JPanel类)*在框架中加入其他组件示例,Java语言概述,3,第8讲图形界面(1),西亚斯学院计算机系姜斌2011年,Java语言概述,4,教学内容,一、图形用户界面介绍概述GUI类的类别一些帮助类二、简单的图形框架类框架Frame和JFrame类框架继承关系JFrame和父类关系及其主要方法三、内容窗格和图形面板类在框架中放置组件JPanel面板类面板上添加控件方法四、在容器类中进行绘制,一、图形用户界面概述,Java语言概述,6,1、图形用户界面概述,Java1.0的出现带来了抽象窗口工具箱(AWT)。设计目标是希望构建一个通用的GUI,使得利用它编写的程序能够运行在所有的平台上,以实现Sun公司提出的口号“一次编写,随处运行”。在Java1.2中,Sun公司推出了新的用户界面库:Swing。相对AWT来说,Swing功能更强大、使用更方便,它的出现使得Java的图形用户界面上了一个台阶。(Swing类是JFCjava基础库的一部分),Java语言概述,7,但是,Swing并没有代替AWT。在Java1.1中,AWT事件处理模型有了根本改变。Swing使用的仍然是Java1.1的事件处理模型。这两个包现在往往都被一起来使用。如下:Importjava.awt.*Importjavax.swing.*;,Java语言概述,8,2、GUI类的类别,GUI类按其特性可以被分成三种不同类型:1.(Container)容器类型:如JFrame,JPanel,和JApplet,它们的特点是能够容纳其他组件。2.(Helper)帮助类型:如Graphics,Color,Font,和FontMetrics等,它们的特点是被Container类和Component类用来绘图和放置对象。3.(Component)组件类型:如JButton,JTextFeild,JTextArea,JComboBox等,它们都是JComponent的子类。(在jdk中的关系图见附录UML图),Java语言概述,9,GUI组件类的特点,awt组件类和Swing组件类都属于GUI类中的组件类,大部分AWT组件在Swing中都有等价的组件,它们在表示形式上差一个“J”。例如:ButtonJButtonLabelJLabelTextFieldJTextFieldSwing组件针对awt组件的优势,参考书上P123页介绍的3点。,Java语言概述,10,3、一些帮助类,再进一步学习中大家经常要接触一些帮助类。要想有效的学习后续内容,我们先看一下,这些类的特点。见附录,二、简单图形窗体,框架容器类Frame,JFrame,Java语言概述,12,1、框架类Frame和JFrame,在Java中,顶层窗口称为框架。在AWT库中,对应于框架的类是Frame在Swing库中,相应的类是JFrame。JFrame类扩展了Frame类。框架Frame是带有标题和边界的顶层窗口框架是一个容器,我们可以在这个容器中放入其他一些图形用户界面组件,如按钮、菜单等,从而组成一个功能完善的程序。(见附录),Java语言概述,13,2框架继承关系,JFrame类的继承层次图,对象类java.lang.object,构件类java.awt.Componet,容器类java.awt.Container,Window类java.awt.Window,框架类java.awt.Frame,J框架类javax.swing.JFrame,Java语言概述,14,Component类是所有GUI对象的祖先,Window类是Frame类的父类,JFrame类直接从Frame继承而来。除了自身定义方法,它的有些方法是从父类继承而来,书上在p128页列出了一些JFrame的主要方法;除了上述方法外,对于框架外观的操作还有一些比较重要的方法如下:setTitle设置窗口中标题栏的文字。setResizable设置用户是否可以改变框架大小。dispose方法关闭窗口,并回收该窗口的所有资源。setLocation设置组件的位置。setSize-设置组件的大小。setBounds重新设置组件的大小和位置。show()setVisible(true)-窗体显示hide(),3、JFrame和父类关系及其主要方法,Java语言概述,15,【例7.1】显示一个空框架importjavax.swing.*;publicclassFirstFramepublicstaticvoidmain(Stringargs)SimpleFrameframe=newSimpleFrame();/设置用户关闭框架时的响应动作frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/显示该框架frame.show();classSimpleFrameextendsJFramepublicSimpleFrame()/设置框架大小setSize(WIDTH,HEIGHT);publicstaticfinalintWIDTH=300;publicstaticfinalintHEIGHT=200;,运行结果,Java语言概述,16,代码几点说明,上述例子对于窗体类进行扩展,定义用户自定义的窗体类SimpleFrame*(思考:前者方法的好处)对于窗体的关闭动作的设置,可以是不同的,当点击框架右上角的()符号时,操作也不同(设置参数可以用JFrame类的常量,如DO_NOTHING_ON_CLOSE,EXIT_ON_CLOSE,DISPOSE_ON_CLOSE,HIDE_ON_CLOSE),三、内容窗格、图形面板类,窗格和内容窗格JPanel类,Java语言概述,18,1、在框架中放置组件(Container类和JPanel类),窗格概念和内容窗格:窗格是JFrame对象所包含的容器对象,最常用的窗格是内容窗格(ContentPane),窗体对象通过getContentPane()方法获取自身的内容窗格。在获取内容后,我们习惯把其他组件类放置在内容窗格中,(见附录)相应的代码如下:/得到JFrame的内容窗格对象ContainercontentPane=getContentPane();Componentc=.;/将组件加入到内容窗格中contentPane.add(c);,Java语言概述,19,JPanel类,JPanel类是面板类,它是一种容器类,它可以容纳其他图形用户界面元素,如按钮、菜单等;另外可以实现嵌套结构,如在面板中还可加入面板,通过Container的add方法被加入相应窗格中。如果需要将一些图形用户界面元素加入到框架中,良好的习惯是:在面板组件(JPanel)中,然后将该面板组件加入到框架的内容窗格(ContentPane)中。(这样的优点大家思考一下。),Java语言概述,20,组件类在面板中的添加操作,*定义一些组件类对象,JLabellabel1=newJLabel(“label1”);JButtonbutton1=newJButton(“button1”);*定义面板对象;JPaneljp=newJPanel();*把上述组件对象添加到面板中jp.add(label1);jp.add(button1);,四,在容器类中进行绘制,Graphics图形类paint和paintComponent方法,Java语言概述,22,1、JFrame和JPanel的图像绘制,在JFrame和JPanel容器组件方法中存在绘制方法,分别为paint或paintComponent方法,用于在容器中进行绘制。这些方法都包含一个Graphics类的对象,Graphics类是java.awt程序包中赋值图形绘制的类,通过它可以进行一些字符串和图形的绘制工作,关于Java以及Java2D图形的处理知识,可以详见第七章内容。,Java语言概述,23,PaintComponet,paintComponent方法是系统方法,自动执行的,型构是:protectedvoidpaintComponent(Graphicsg);,Java语言概述,24,为了在面板中进行绘制,需要重载JComponent类的paintComponent方法。classMyPanelextendsJpanelpublicvoidpaintComponent(Graphicsg)super.paintComponent(g);./相关的绘制代码paintComponent方法是自动执行的,当窗口需要被重新绘制时,如用户缩放窗口,或还原已最小化的窗口时,系统就会自动调用该方法。在框架中显示文本信息的方法:g.drawString(text,x,y),Java语言概述,25,【例1】在框架中显示信息程序代码见HelloWorld.java。运行结果如下:,Java语言概述,26,2、文本和字体,通过Font类对象设置字体。FontStringFont=newFont(“宋体”,Font.ITALIC,20);字体风格有以下几种选项:Font.PLAIN/常规Font.BOLD/加粗Font.ITALIC/倾斜不同的系统中安装了不同的字体,为了得到本系统中所有已安装的字体,我们可以通过GraphicsEnvironment类的getAvailableFontFamilyNames方法来实现。该方法返回一个字符串数组,数组内包含所有可用的字体名。【例7.4】显示系统中所有字体名。程序见ListFonts.java,Java语言概述,27,【例2】字体设置采用“宋体”显示字符串“你好,Java!”,字体风格为加粗、倾斜,大小为20点。程序代码见FontSet.java。运行结果如下:,Java语言概述,28,3绘制简单图形,利用Graphics类提供的一些方法进行简单图形的绘制。如:drawLine、drawPolyLine、drawPolygon、drawArc。drawLine用来画线,调用格式:voiddrawLine(intx1,inty1,intx2,inty2)(x1,y1)和(x2,y2)为线的两个端点。drawPolygon用来绘制多边形,调用格式:voiddrawPolygon(Polygonp)参数是多边形对象Polygon,先定义Polygon对象,然后将点加入到该对象中,然后利用drawPolygon进行多边形的绘制:Polygonp=newPolygon;p.addPoint(x1,y1);p.addPoint(x2,y2);.g.drawPolygon(p);,Java语言概述,29,【例3】简单图形的绘制直线,弧,多边形的绘制。程序代码见SimpleDraw.java。运行结果如下:,Java语言概述,30,Java提供了矩形、圆角矩形、椭圆等基本形状的绘制方法:矩形:voiddrawRect(intx,inty,intwidth,intheight)圆角矩形:voiddrawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)椭圆:voiddrawOval(intx,inty,intwidth,intheight)Java还提供了方便的填充封闭图形的方法,只需要将前面介绍的方法中的draw改为fill即可。如:voidfillRect(intx,inty,intwidth,intheight)voidfillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)voidfillOval(intx,inty,intwidth,intheight),Java语言概述,31,4、颜色,Graphics类提供了与颜色相关的方法:getColor返回当前颜色设置。setColor设置当前颜色。setColor方法的调用格式为:voidsetColor(Colorc)我们可以选用Color类提供的13种标准颜色的预定义常数(见书上表71),也可以采用Color构建器来创建Color对象:Color(intredness,intgreenness,intblueness)参数redness,greenness,blueness分别表示红、绿、蓝的值,它们的值在0至255范围内。以下是颜色使用的例子:g.setColor(Color.green);g.drawString(“你好!”,100,100);g.setColor(newColor(128,0,128);/自定义颜色g.drawString(“你好!”,100,200);,Java语言概述,32,JFrame类的超类Component类提供的颜色操作的相关方法:setBackground设置背景色。setForeground设置在组件上进行绘制的默认颜色。【例4】颜色设置设置图形颜色,将框架背景颜色设置为桌面的颜色。程序代码见ColorRect.java。运行结果如下:,Java语言概述,33,5、图像,通过Graphics类提供的drawImage方法实现图像的显示:publicvoidpaintComponent(Graphicsg).g.drawImage(image,x,y,null);参数image封装了要显示的图像文件。通过Toolkit类的静态getDefaultToolkit方法,可以读取GIF文件和JPEG文件:Stringnm=“test.gif”;Imageimage=Toolkit.getDefaultToolkit().getImage(nm);通过以上代码,可以得到一个本地图像文件,如果要在网络上得到一个图像文件,必须使用URL类。相应的代码如下:URLurl=newURL(“,Java语言概述,34,【例5】显示图像从本地加载一幅图像,并在窗口的中间显示。程序代码见ImageShow.java。运行结果如下:,Java语言概述,35,为了在框架中添加一些组件,实现如附录中框架的效果。(大家看一下示例),6、在框架中加入其他组件示例,Java语言概述,36,本讲小结,通过本讲,我们了解和掌握了如下知识:GUI类的两个重要类包awt和swing包,以及它们的区别;组件类和容器类概念顶层容器框架的概念,JFrame和Frame的区别,以及JFrame中的主要属性设置方法,以及如何去建立框架对象面板类和框架类的关系;如何在框架和面版中进行绘制操作,Java语言概述,37,课后练习,Awt包和swing包组件的区别三种类别的GUI类分别是什么,每一个类别举出三个类的例子,介绍它们类的含义和功能;(可通过代码举例说明),Java语言概述,38,定义一个有图标的框架类MyFrame,标题为“框架尺寸”,其它要求如下,设置具有以下特征的框架:它的高度和宽度为整个屏幕的1/3;自定义窗口的标题和图标;窗口的大小不可变。,图标,标题,最大化按钮失效,题一简单窗体,附录,Java语言概述,40,框架(Frame)图例,Return,Java语言概述,41,创建组件,JButtonjbtOk=newJButton(“确认”);JLabeljlblName=newJLable(“请输入.”);JTextAreajtaInput=newJTextArea();JCheckBoxjchkOp1=newJCheckBox(“选项1”);JRadioButtonjrbOp1=newJRadioButton(“选项1”);JComboBoxjcboColor=newJComboBox(newString“Red”,”Green”,”Blue”),Java语言概述,42,GUI类在awt和Swing包中结构,Return,Object,Dimension,Font,FontMetrics,Color,Graphics,Component,Container,LayoutManager,Panel,Window,JComponent,1,1,Frame,JFrame,Dialog,JDialog,Applet,JApplet,1,*,JPanel,Java语言概述,43,Swing组件,Return,Java语言概述,44,常用的容器类,Container类用来组织组件,用一个布局管理器(layoutmanager)按需要的位置和

温馨提示

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

评论

0/150

提交评论