教学课件-Java语言程序设计_第1页
教学课件-Java语言程序设计_第2页
教学课件-Java语言程序设计_第3页
教学课件-Java语言程序设计_第4页
教学课件-Java语言程序设计_第5页
已阅读5页,还剩775页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第10章Java异常处理本章内容10.1Java异常层次结构10.2Java异常处理语法10.3抛出异常10.1Java异常层次结构10.2Java异常处理语法Java异常处理的完整语法是:Java异常处理语法

需要注意的问题是:(1)try、catch、finally三个语句块都不能独自使用,三者可以组成如下三种结构.try{…}catch(异常类型名

e){…}finally{…}try{…}catch(异常类型名

e){…}

try{…}finally{…}10.3抛出异常抛出异常主要有通过throw和throws语句。在方法体内,用throw来抛出一个异常,throw抛出异常语法格式为:throw异常对象名字;throws表示用来声明方法可能会抛出异常类别,用在方法名后,语法格式为:[修饰符]方法名([参数列表])throws异常类型1,异常类型2...异常类型n。异常举例例10-1下面给出一个异常的简单例子,三角形类Triangle10_1,异常类TriangleException1、异常类TriangleException2。(1)定义异常类TriangleException1,该异常类指出存在小于或等于0的边长情况。1classTriangleException1extendsException{2 privateStringmsg;3TriangleException1(){4msg="存在小于或等于0的边长。";5}6@Override7publicStringtoString(){8return"异常:"+msg;9}10}异常举例(2)定义异常类TriangleException2,该异常类报告三角形的任意两条边边长之和小于或等于第三条边长错误。1classTriangleException2extendsException{2 Stringmsg;3 TriangleException2(){4 msg="异常:三角形的任意两条边边长之和小于或等于第三条边长。";5 }6 publicStringtoString(){7 returnmsg; 8 }9}异常举例1publicclassTriangle10_1{2privatedoublea,b,c;3Triangle10_1(doublea,doubleb,doublec){4this.a=a;5this.b=b;6this.c=c;7}8/*注意下面语句,该方法可能会抛出异常类TriangleException1,TriangleException29的异常。*/10publicdoublegetArea()throwsTriangleException1,TriangleException2{11TriangleException1t1=newTriangleException1();12TriangleException2t2=newTriangleException2();13if(a<=0||b<=0||c<=0)14throwt1;////抛出异常15if(a+b<=c||b+c<=a||a+c<=b)16throwt2;//抛出异常17doublep,s;18p=(a+b+c)/2.0;19s=Math.sqrt(p*(p-a)*(p-b)*(p-c));20returns;21}异常举例22publicstaticvoidmain(String[]args){23Scanners=newScanner(System.in);24doublea,b,c;25System.out.print("输入三角形的3条边长:");26a=s.nextDouble();27b=s.nextDouble();28c=s.nextDouble();29try{30Triangle10_1t1=newTriangle10_1(a,b,c);31System.out.println("三角形的面积是:"+t1.getArea());32}catch(TriangleException1e1){//可能发生异常e133System.out.println(e1);34}35catch(TriangleException2e2){//可能发生异常e136System.out.println(e2);37}38finally{39//该语句无论上面异常是否发生,都会执行。40System.out.println("求三角形面积!");41}42}43}本章结束!第11章Java的图形界面设计基础本章内容11.1AWT11.2容器概念11.3窗格概念11.4布局管理器概念11.5Java事件处理11.1AWT在Java图形库中,目前最著名的三大GUI库分别是:(1)抽象窗口工具集AWT(AbstractWindowToolkit),包含于所有的JavaSDK中。(2)高级图形库Swing,亦包含于Java开发包中Java开发工具集。(3)标准窗口部件库SWT(StandardWidgetToolkit),在Eclipse中可以利用。AWTjava.awt包中提供了GUI设计所使用的类和接口,在下图中,可以看到主要GUI类之间的继承关系。组件组件是一个以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮、一个标签等。类java.awt.Component是许多组件类的父类,Component类中封装了组件通用的方法和属性。Component类的主要成员方法包括:publicvoidsetBackground(Colorbc)设置背景色publicvoidsetForeground(Colorfc)设置前景色publicColorgetBackground(Colorgbc)获取背景色publicColorgetForeGround(Colorgfc)获取前景色与颜色有关的方法publicvoidsetFont(Fontfont)设置字体publicFontgetFont(Fontfont)获取字体FontMetrics getFontMetrics(Fontfont)获得指定字体的字体规格。与字体有关的主要方法组件publicvoidsetSize(intw,inth)设置组件大小(包括宽度和高度)publicvoidsetLocation(intx,inty)设置组件在容器中的位置publicDimensiongetSize()返回组件的大小(组件的宽度和高度)publicPointgetLocation(intx,inty)返回组件在容器中的位置(左上角坐标)publicvoidsetBounds(intx,inty,intwidth,intheight)设置组件在容器中的位置及组件大小publicRectanglegetBounds()返回组件在容器中的位置和大小void setVisible(booleanb)根据参数b的值显示或隐藏此组件。void setEnabled(booleanb)根据参数b的值启用或禁用此组件。Container getParent()获得此组件的父级。voidvalidate()确保组件具有有效的布局。voidinvalidate()使此组件无效。voiddoLayout()提示布局管理器布局此组件。voidrequestFocus()请求此Component获得输入焦点,并且此Component的顶层祖先成为获得焦点的Window。组件的主要方法(续)void setVisible(booleanb)根据参数b的值显示或隐藏此组件。void setEnabled(booleanb)根据参数b的值启用或禁用此组件。Container getParent()获得此组件的父级。voidvalidate()确保组件具有有效的布局。voidinvalidate()使此组件无效。voiddoLayout()提示布局管理器布局此组件。voidrequestFocus()请求此Component获得输入焦点,并且此Component的顶层祖先成为获得焦点的Window。void paint(Graphicsg)绘制此组件。void paintAll(Graphicsg)绘制此组件及其所有子组件。void repaint()重绘此组件。void repaint(intx,inty,intwidth,intheight)重绘组件的指定矩形区域。void repaint(longtm)重绘组件。void repaint(longtm,intx,inty,intwidth,intheight)在tm毫秒内重绘组件的指定矩形区域。void update(Graphicsg)更新组件。组件的主要方法(续)GraphicsgetGraphics()为组件创建一个图形上下文。GraphicsConfiguration getGraphicsConfiguration()获得与此Component相关的GraphicsConfiguration。int getHeight()返回组件的当前高度。int getWidth()返回组件的当前宽度。int getX()返回组件原点的当前x坐标。int getY()返回组件原点的当前y坐标。PointgetLocation()获得组件的位置,形式是指定组件左上角的一个点。PointgetLocation(Pointrv)将组件的x,y原点存储到“返回值”rv中并返回rv。PointgetLocationOnScreen()获得组件的位置,形式是一个指定屏幕坐标空间中组件左上角的一个点。Component getComponentAt(intx,inty)确定此组件或其直接子组件之一是否包含(x,y)位置,并且如果是,则返回包含该位置的组件。Component getComponentAt(Pointp)返回包含指定点的组件或子组件。booleancontains(intx,inty)检查组件是否“包含”指定的点,其中x和y是相对于此组件的坐标系统定义的。booleancontains(Pointp)检查组件是否“包含”指定的点,其中该点的x和y坐标是相对于此组件的坐标系统定义的。RectanglegetBounds()以Rectangle对象的形式获得组件的边界。RectanglegetBounds(Rectanglerv)将组件的边界存储到“返回值”rv中并返回rv。void setBounds(intx,inty,intwidth,intheight)移动组件并调整其大小。void setBounds(Rectangler)移动组件并调整其大小,使其符合新的有界矩形r。void setLocation(intx,inty)将组件移到新位置。void setLocation(Pointp)将组件移到新位置。Dimension getSize()以Dimension对象的形式返回组件的大小。void setSize(Dimensiond)调整组件的大小,使其宽度为d.width,高度为d.height。void setSize(intwidth,intheight)调整组件的大小,使其宽度为width,高度为height。了解SwingAWT组件和Swing组件最大的不同是:Swing组件不含本地代码,可以不受硬件平台限制。而AWT组件含有本地代码,跟硬件平台密切相关。由于AWT功能非常有限,在建立图形用户界面时,我们一般都不会用它,而是利用Java中功能更强大的Swing。Swing属于Java基础类库JFC(JavaFoundationClasses)的一部分,它主要帮助我们建立用户界面。了解SwingSwing中的主要类的继承关系GaphicsEnvironment类GaphicsEnvironment类是抽象类,描述了Java应用程序在特定平台上可用的GraphicsDevice对象和Font对象的集合。此GraphicsEnvironment中的资源可以是本地资源,也可以位于远程机器上。GaphicsEnvironment类的主要方法如下:abstractGraphics2D createGraphics(BufferedImageimg)返回一个呈现指定BufferedImage的Graphics2D对象。abstractFont[] getAllFonts()返回一个数组,它包含此GraphicsEnvironment中所有可用字体的像素级实例。abstractString[] getAvailableFontFamilyNames()返回一个包含此GraphicsEnvironment中所有字体系列名称的数组。abstractString[] getAvailableFontFamilyNames(Localel)返回一个包含此GraphicsEnvironment中所有字体系列名称的数组,它针对默认语言环境进行了本地化。GaphicsEnvironment类abstractGraphics2D createGraphics(BufferedImageimg)返回一个呈现指定BufferedImage的Graphics2D对象。abstractFont[] getAllFonts()返回一个数组,它包含此GraphicsEnvironment中所有可用字体的像素级实例。abstractString[] getAvailableFontFamilyNames()返回一个包含此GraphicsEnvironment中所有字体系列名称的数组。abstractString[] getAvailableFontFamilyNames(Localel)返回一个包含此GraphicsEnvironment中所有字体系列名称的数组,它针对默认语言环境进行了本地化。PointgetCenterPoint()返回Windows应居中的点。abstractGraphicsDevicegetDefaultScreenDevice()返回默认的屏幕GraphicsDevice。staticGraphicsEnvironment getLocalGraphicsEnvironment()返回本地GraphicsEnvironment。Rectangle getMaximumWindowBounds()返回居中Windows的最大边界。abstractGraphicsDevice[] getScreenDevices()返回所有屏幕GraphicsDevice对象的一个数组。staticbooleanisHeadless()测试此环境是否支持显示器、键盘和鼠标。boolean isHeadlessInstance()返回此图形环境是否支持显示器、键盘和鼠标。void preferLocaleFonts()指示在逻辑字体到实际字体的映射关系中特定于语言环境的字体的首选项。颜色类Colorjava.awt包定义了Color类,该类用于封装默认sRGB颜色空间中的颜色,或者用于封装由ColorSpace标识的任意颜色空间中的颜色。每种颜色都有一个隐式的alpha值1.0,或者有一个在构造方法中提供的显式的alpha值。Color类的常用构造方法如下:Color(floatr,floatg,floatb)用指定的红色、绿色和蓝色值创建一种不透明的

sRGB

颜色,这三个颜色值的取值范围在区间(0.0-,1.0的)内。Color(floatr,floatg,floatb,floatalpha)用指定的红色、绿色、蓝色和alpha值创建一种sRGB颜色,r、g、b和appha的取值范围在区间(0.0-,1.0的)内。Color(intrgb)用指定的组合RGB值创建一种不透明的sRGB颜色,此sRGB值的第16-23位表示红色分量,第8-15位表示绿色分量,第0-7位表示蓝色分量。Color(intrgba,booleanhasAlpha)用指定的组合RGBA值创建一种sRGB颜色,此rgba值的第24-31位表示alpha分量,第16-23位表示红色分量,第8-15位表示绿色分量,第0-7位表示蓝色分量。hasAlpha表示是否需要alpha分量,hasAlpha值为true表示需要alpha分量,否则不需要alpha分量。颜色类ColorColor(intr,intg,intb)用指定的红色、绿色和蓝色值创建一种不透明的sRGB颜色,r、g和b的取值范围在区间(0,255的)内。Color(intr,intg,intb,intalpha)用指定的红色、绿色、蓝色和alpha值创建一种sRGB颜色,r、g、b和appha的取值范围在区间(0,255的)内。Color(intr,intg,intb,intalpha)用指定的红色、绿色、蓝色和alpha值创建一种sRGB颜色,r、g、b和appha的取值范围在区间(0,255的)内。例如,Colorcolor1,color2,color3;Color1=newColor(100,100,100);Color2=newColor(0.4,0.5,0.6);Color3=Color.red;Font类Java平台可以区分两种字体是实际的字体库,包含字形数据和表,这些数据和表使用字体技术(如TrueType或PostScriptType1)将字符序列映射到字形序列。物理字体逻辑字体逻辑字体不是实际的字体库。而是由Java运行时环境将逻辑字体名称映射到物理字体。映射关系与实现和通常语言环境相关,Font类Font类的主要构造方法有:Font(Stringname,intstyle,intsize)根据指定名称、样式和点大小,创建一个新Font。boolean canDisplay(charc)检查此Font是否具有指定字符的字形。staticFont createFont(intfontFormat,FilefontFile)返回一个使用指定字体类型和指定字体文件的新Font。staticFont createFont(intfontFormat,InputStreamfontStream)返回一个使用指定字体类型和输入数据的新Font。staticFont decode(Stringstr)返回str参数所描述的Font。staticFont getFont(Stringnm)从系统属性列表返回一个Font对象。float getItalicAngle()返回此Font的斜角。int getNumGlyphs()返回此Font中的字形数量。String getFamily()返回此Font的系列名称。String getFontName()返回此Font的字体外观名称。String getName()返回此Font的逻辑名称。String getPSName()返回此Font的postscript名称。int getSize()返回此Font的点大小,舍入为整数。floatgetSize2D()返回此Font的点大小(以float值表示)。int getStyle()返回此Font的样式。boolean isBold()指示此Font对象的样式是否为BOLD。boolean isItalic()指示此Font对象的样式是否为ITALIC。boolean isPlain()指示此Font对象的样式是否为PLAIN。boolean isTransformed()指示此Font对象是否具有影响其大小以及Size属性的变换。Font类例11-1列出本地所有字体的名称等信息。1publicclassFonts{2publicstaticvoidprintFont(Fontf){3System.out.print("系列名称:"+f.getFamily()+",名字:");4System.out.println(f.getFontName()+",逻辑名字:"+f.getName());5}6publicstaticvoidmain(String[]args){7GraphicsEnvironmentge;8ge=GraphicsEnvironment.getLocalGraphicsEnvironment();9Font[]fonts=ge.getAllFonts();10for(Fontfont:fonts)11printFont(font);12}13}返回目录11.2容器概念容器(Container)是Component的子类,因此容器本身也是一个组件,具有组件的所有性质。但与一般组件,如按钮、标签、文本输入框等不同,容器的主要功能是容纳其他组件。有的容器还可以嵌套其他的容器。而我们称最外层的容器是顶层容器。除顶层容器之外的容器便是中间容器,每个中间容器可以包含若干个基本组件和其他的中间容器。容器概念Container类的主要方法:Component add(Componentcomp)将指定组件追加到此容器的尾部。Component add(Componentcomp,intindex)将指定组件添加到此容器的给定位置上。void remove(Componentcomp)从此容器中移除指定组件。void remove(intindex)从此容器中移除index指定的组件。void removeAll()从此容器中移除所有组件。void addContainerListener(ContainerListenerl)添加指定容器的侦听器,以接收来自此容器的容器事件。LayoutManager getLayout()获得此容器的布局管理器。void doLayout()使此容器布置其组件。Component findComponentAt(intx,inty)对包含指定位置的可视子组件进行定位。Component getComponent(intn)获得此容器中的第n个组件。Component getComponentAt(intx,inty)获取在点(x,y)位置的组件。int getComponentCount()获得此面板中的组件数。Component[] getComponents()获得此容器中的所有组件。ContainerListener[] getContainerListeners()返回已在此容器上注册的所有容器侦听器的数组。void removeContainerListener(ContainerListenerl)移除指定容器的侦听器,从而不再接收来自此容器的容器事件。容器概念Swing提供了四种顶层容器,它们分别是JWindow、JDialog、JFrame和JApplet。它们共有的相同的主要方法:ContainergetContentPane()返回此窗体的contentPane对象void setContentPane(ContainercontentPane)设置contentPane属性。JRootPanegetRootPane()返回此窗体的rootPane对象。protectedvoid setRootPane(JRootPaneroot)设置rootPane属性。Component getGlassPane()返回此窗体的glassPane对象。voidsetGlassPane(ComponentglassPane)设置glassPane属性。JLayeredPane getLayeredPane()返回此窗体的layeredPane对象。JLayeredPane setLayeredPane()设置此窗体的layeredPane对象。int getDefaultCloseOperation()返回用户在此窗体上发起"关闭"时执行的操作。void setDefaultCloseOperation(intoperation)设置用户在此窗体上发起"关闭"时默认执行的操作。JMenuBar getJMenuBar()返回此窗体上设置的菜单栏。void setJMenuBar(JMenuBarmenubar)设置此窗体的菜单栏。void remove(Componentcomp)从该容器中移除指定组件。void setIconImage(Imageimage)设置此frame要显示在最小化图标中的图像。容器概念例11-2使用JFrame创建一个简单Hello应用程序(HelloJFrame类),如右图所示。1publicclassHelloJFrame{2publicstaticvoidmain(Strings[]){3//创建窗口实例,并设置标题4JFramef=newJFrame("hello系统");5//创建按钮实例6JButtonb=newJButton("进入系统");7Containerc=null;8JLabellb=newJLabel("欢迎使用本系统");9//设置标签的字体颜色为蓝色10lb.setForeground(Color.BLUE);11//得到JFrame中的conentPane对象,返回Container对象

12c=f.getContentPane();13//将标签对象lb放入Container对象c中心,14c.add(lb,BorderLayout.CENTER);//将标签lb放到窗口的中部15c.add(b,BorderLayout.EAST);//将按钮对象b放到窗口东边

16f.setSize(300,200);//设置窗口对象f的大小17f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);18f.setVisible(true);//显示窗口19}20}返回目录11.3窗格概念(1)根窗格:它是在JFrame窗体创建时就自动添加进来的,是所有其他窗格的载体,它覆盖窗体的除标题栏和边条之外的整个表面。根窗格在默认情况下是不可见的。根窗格负责管理其他窗格(层窗格,玻璃窗格),如使其他窗格覆盖整个JFrame窗体等。(2)层窗格:它是其他窗格的父级窗格,在根窗格的上面。它再次覆盖窗体的整个表面,内容窗格和菜单栏被添加到层窗格上。当添加了菜单栏时,菜单栏被添加到层窗格的顶部,剩下的部分被内容窗格填充。层窗格是分很多层的,每一层使用一个相应的数字来表示,而内容窗格就位于层窗格中的某一层。(3)内容窗格:内容窗格是层窗格中的某一层。默认的内容窗格是不透明的,而且是一个JPane对象。该窗格在窗体中起着工作区的作用,当向窗体添加组件时就应该添加到这一层上,而不能像AWT那样直接添加到窗体上。实际上该组件也是被添加到内容窗格上的,若窗体未设置内容窗格,则组件无法显示。(4)玻璃窗格:该窗格总是存在的,而且它位于最上面,默认情况下玻璃窗格是不可见的,玻璃窗格用于接收鼠标事件和在其他组件上绘图。(5)JPanel窗格:它是一个容器,可以在它之上放置按钮、滑块等组件,可以在它之上绘图。窗格举例例11-3关于窗格的应用程序,本例程序运行结果如图11-5所示。1、定义显示文字信息窗格MessagePanel类。1classMessagePanelextendsJPanel{2//重载方法3protectedvoidpaintComponent(Graphicsg){4super.paintComponent(g);5g.drawString("消息窗格",10,20);6}7}窗格举例1classPanelFrameextendsJFrame{2privatestaticfinalintDEFAULT_WIDTH=500;3privatestaticfinalintDEFAULT_HEIGHT=300;4publicPanelFrame(){5setTitle("消息框架");6setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);//设置框架大小

7MessagePanelpanel=newMessagePanel();//给框架添加窗格

8add(panel);9setVisible(true);10}11publicstaticvoidmain(String[]args){12PanelFrameframe=newPanelFrame();13frame.setVisible(true);//显示框架14}15}11.4布局管理器概念6种布局管理器分别是FlowLayout、BorderLayout、BoxLayout、GirdBagLayout、GirdLayout和CardLayout。其中CardLayout必须和其他5种配合使用,不是特别常用的。应该注意以下两点:(1)容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。(2)如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为setLayout(null);流式布局管理器流式布局管理器(FlowLayout)把容器看成一个行集,一行填满了,再填下一行。每行行高是由该行中的控件高度所决定。流式布局管理器是窗格(Panel)和所有JApplet的默认布局。FlowLayout的构造方法如下:

FlowLayout()生成一个默认的流式布局,组件在容器里居中,每个组件之间留下5个像素的距离.FlowLayout(int

alignment)可以设定每行组件的对齐方式.流式布局管理器例11-4下面是使用了流式布局管理器管理按钮控件。1publicclassFlowJFrame{2publicstaticvoidmain(Strings[]){3//创建窗口实例,并设置标题4JFramef=newJFrame("流式布局管理器例子");5Containerc=null;6//得到JFrame中的conentPane对象,返回Container对象

7c=f.getContentPane();8FlowLayoutflowlayout=newFlowLayout();//容器默认的对齐方式(FlowLayout.CENTER)9flowlayout.setAlignment(FlowLayout.RIGHT);//设置右对齐方式

10c.setLayout(flowlayout);11//创建按钮数组,数组大小为912JButtonb[]=newJButton[9];13inti;14for(i=0;i<9;i++)15{16b[i]=newJButton("按钮"+i);17b[i].setBackground(Color.LIGHT_GRAY);//设置按钮的背景颜色18c.add(b[i]);//加入按钮Container对象19}20f.setSize(600,200);//设置窗口对象f的大小21f.setVisible(true);//显示窗口22}23}流式布局管理器

(2)RIGHT对齐方式(1)CENTER对齐方式

(3)LEFT对齐方式(4)Trailing对齐方式(5)Leading对齐方式边界布局管理器边界布局管理器(BorderLayout)是一种非常简单的布局策略。它把容器内的空间简单地划分为东、西、南、北、中五个区域,当加入一个组件都应该指明把这个组件放在哪个区域中,默认的情况是加入到中间。但是,不一定所有的区域都必须有组件,如果四周的区域(West、East、North、South区域)没有组件,则由Center区域去补充。如果Center区域也没有组件,则容器保持空白.BorderLayout是顶层容器JFrame、JDialog以及JApplet的默认布局管理器。BorderLayout的构造方法如下:BorderLayout()构造一个组件之间没有间距的新边界布局。BorderLayout(inth,intv)用指定的组件之间的水平间距构造一个边界布局。边界布局管理器例11-5边界管理器布局程序示例。1publicclassBorderJFrame{2publicstaticvoidmain(Strings[]){3//创建窗口实例,并设置标题4JFramef=newJFrame("边界布局管理器");5Containerc=null;6//得到JFrame中的conentPane对象,返回Container对象

7c=f.getContentPane();8c.setLayout(newBorderLayout());9Stringdirection[]={BorderLayout.EAST,BorderLayout.SOUTH,10BorderLayout.WEST,BorderLayout.NORTH,BorderLayout.CENTER};11//创建按钮数组,数组大小为512JButtonb[]=newJButton[5];13for(inti=0;i<5;i++){14b[i]=newJButton("按钮"+Integer.toString(i));15b[i].setBackground(Color.LIGHT_GRAY);16c.add(b[i],direction[i]);17}18f.setSize(200,200);//设置窗口对象f的大小19f.setVisible(true);//显示窗口20}21}网格布局管理器网格布局管理器(GridLayout)将成员按网格型排列,每个成员尽可能地占据网格的空间,每个网格也同样尽可能地占据空间,从而各个成员按一定的大小比例放置。如果你改变大小,GridLayout将相应地改变每个网格的大小,以使各个网格尽可能地大,占据Container容器全部的空间。GridLayout的构造方法如下:GridLayout()创建具有默认值的网格布局,即每个组件占据一行一列。GridLayout(intr,intc)创建具有指定行数r和列数c的网格布局。另外,我们可以通过下面两个方法来改变网格布局中的行列数。voidsetColumns(intc)设置布局中的列数为c。void setRows(intr)设置布局中的行数为r。网格布局管理器网格布局管理器例11-6网格布局举例。1publicclassGridJFrame{2publicstaticvoidmain(Strings[]){3//创建窗口实例,并设置标题4JFramef=newJFrame("网格布局管理器");5Containerc=null;6//得到JFrame中的conentPane对象,返回Container对象

7c=f.getContentPane();8c.setLayout(newGridLayout(5,4));//5行4列网格9//创建按钮数组,数组大小为510JButtonb[]=newJButton[9];11for(inti=0;i<9;i++){12b[i]=newJButton("按钮"+Integer.toString(i));13b[i].setBackground(Color.LIGHT_GRAY);14c.add(b[i]);15}16f.setSize(200,200);//设置窗口对象f的大小17f.setVisible(true);//显示窗口

18}19}卡式布局管理器卡式布局管理器(CardLayout)能够帮助用户处理两个及更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面.布局管理器(CardLayout)就象一副叠得整整齐齐的卡片,但是我们只能见到最上面的一张,一张卡片就相当于布局管理器中的每一层。CardLayout的构造方法如下:CardLayout()创建一个间隙大小为0的新卡片布局。CardLayout(inthgap,intvgap)创建一个具有指定的水平和垂直间隙的新卡片布局。返回目录11.5Java事件处理java中的事件处理机制的参与者有3种角色:事件对象(EventObject):可将它作为事件监听者相应方法的参数。事件源(EventSource):具体操作的对象。比如点击一个按钮,那么该按钮就是事件源。事件监听者或者事件监听器或者事件适配器(eventlistener):实现事件监听接口中部分或全部方法的类就是事件监听者。在Java事件处理过程中,伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject。根据EventObject的定义(publicclassEventObjectextendsObjectimplementsSerializable),所有事件对象在构造时都引用了对象。对每个明确的事件的发生,都相应地定义一个明确的方法。这些方法都集中定义在事件监听者(EventListener)接口中,这个接口继承于java.util.EventListener。Java事件处理Java的事件处理机制是:(1)操作者在事件源上触发事件操作,即调用firexxxx()方法;例如,单击按钮,将调用按钮单击事件;(2)firexxxx()方法创建事件对象,说明该事件已经发生了,然后通知事件监听者(或者叫做事件适配器);(3)由于事件监听者实现了事件监听接口中的方法,事件监听者根据事件调用事件监听接口中的方法。(4)只有与所触发事件关联的事件监听者调能用事件处理方法。Java事件处理过程举例例11-8通过汽车换挡处理来演示Java事件处理过程。(1)汽车换挡操作事件ShiftEvent类。1publicclassShiftEventextendsEventObject{2StringshiftState;//汽车换挡状态D,D1,D2,P,R3publicShiftEvent(Objectsource,StringshiftState){4super(source);//调用EventObject构造方法,初始化父类5this.shiftState=newString(shiftState);6}7//得到汽车换挡状态8publicStringgetShiftState(){9returnshiftState;10}11}Java事件处理过程举例(续)(2)换挡监听接口ShiftListener。importjava.util.EventListener;1publicinterfaceShiftListenerextendsEventListener{2publicvoidshiftEvent(ShiftEvente);3}(3)监控换到档位D1的事件监控器。1publicclassShiftListenerD1AdapterimplementsShiftListener{2@Override3publicvoidshiftEvent(ShiftEvente){4if(e.getShiftState()!=null&&e.getShiftState().compareTo("D1")==0)5System.out.println("换到档位"+"D1");6}7}Java事件处理过程举例(续)(4)监控换到档位D2的事件监控器。1publicclassShiftListenerD2AdapterimplementsShiftListener{2@Override3publicvoidshiftEvent(ShiftEvente){4if(e.getShiftState()!=null&&e.getShiftState().equals("D2"))5System.out.println("换到档位"+"D2");6}7}(5)监控换到档位D的事件监控器。1publicclassShiftListenerDAdapterimplementsShiftListener{2@Override3publicvoidshiftEvent(ShiftEvente){4if(e.getShiftState()!=null&&e.getShiftState().equals("D"))5System.out.println("换到档位"+"D");6}7}Java事件处理过程举例(续)(7)监控换到档位R的事件监控器。1publicclassShiftListenerDAdapterimplementsShiftListener{2@Override3publicvoidshiftEvent(ShiftEvente){4if(e.getShiftState()!=null&&e.getShiftState().equals("R"))5System.out.println("换到档位"+"R");6}7}Java事件处理过程举例(续)(8)档位操作杆类ShiftMananger1publicclassShiftManager{2privateCollectionlisteners=null;3publicShiftManager(){4listeners=newHashSet();5//加入换挡操作事件的监视器6this.addShiftListener(newShiftListenerD1Adapter());7this.addShiftListener(newShiftListenerD2Adapter());8this.addShiftListener(newShiftListenerDAdapter());9this.addShiftListener(newShiftListenerPAdapter());10this.addShiftListener(newShiftListenerRAdapter());11}12//添加监视器13publicvoidaddShiftListener(ShiftListenerlistener){14if(listeners==null){15listeners=(newHashSet());16}17listeners.add(listener);18}19//删除监视器20publicvoidremoveShiftListener(ShiftListenerlistener){21listeners.remove(listener);22}Java事件处理过程举例(续)23//触发到转到D1事件24protectedvoidfireShiftD1(){25ShiftEventshiftEvent=newShiftEvent(this,"D1");26notifyListeners(shiftEvent);27}28//触发转到D2档事件29protectedvoidfireShiftD2(){30ShiftEventshiftEvent=newShiftEvent(this,"D2");31notifyListeners(shiftEvent);32}33//触发转到D档事件34protectedvoidfireShiftD(){35ShiftEventshiftEvent=newShiftEvent(this,"D");36notifyListeners(shiftEvent);37}38//触发转到P档事件39protectedvoidfireShiftP(){40ShiftEventshiftEvent=newShiftEvent(this,"P");41notifyListeners(shiftEvent);42}Java事件处理过程举例(续)43//触发转到D档事件44protectedvoidfireShiftR(){45ShiftEventshiftEvent=newShiftEvent(this,"R");46notifyListeners(shiftEvent);//*通知所有的事件监听者*/47}48/**49*通知所有事件监听者*/50privatevoidnotifyListeners(ShiftEvente){51Iteratoriter=listeners.iterator();52//iter是事件监听者,由于只需要调用其事件监听接口中的方法,不考虑它是何种事件监听者53//所以下面只需要定义事件监听者接口就行了。54while(iter.hasNext()){55ShiftListenerlistener=(ShiftListener)iter.next();56listener.shiftEvent(e);57}58}59}Java事件处理过程举例(续)(9)定义Driver类,该类对象相当于驾驶员,他操作档位换挡杆ShiftMananger对象。21System.out.println("找到停车位置");22//换到档位R23shiftManager.fireShiftR();24System.out.println("将车停好");25//换到档位P26shiftManager.fireShiftP();27System.out.println("车熄火");28}29publicstaticvoidmain(String[]args){30Driverdriver=newDriver();31driver.operateBus();3233}34}1publicclassDriver{2publicvoidoperateBus(){3ShiftManagershiftManager=newShiftManager();4System.out.println("点火启动汽车:");5System.out.println("慢慢松开刹车板");6//换到档位D17shiftManager.fireShiftD1();8System.out.println("完全松开刹车板");9//换到档位D210shiftManager.fireShiftD2();11System.out.println("继续加速");12//换到档位D13shiftManager.fireShiftD();14System.out.println("运行一段时间后。。。");15//换到档位D216shiftManager.fireShiftD2();17System.out.println("减速");18//换到档位D119shiftManager.fireShiftD1();20System.out.println("靠路边慢慢行驶");21System.out.println("找到停车位置");事件的种类事件的种类Java把事件类大致分为两种:底层事件和语义事件。其中直接继承来自于AWTEvent的事件,称之为语义事件,如AdjustmentEvent、ActionEvent以及ComponentEvent等。继承来自于ComponentEvent类的事件是低级事件,如WindowEvent、KeyEvent、ContainerEvent、FocusEvent等。事件的种类事件名称事件说明触发条件ComponentEvent组件事件显示、移动、缩放或隐藏组件InputEvent输入事件键盘操作(按下键,或释放键)MouseEvent鼠标事件鼠标操作(鼠标移动,按下,或释放)FocusEvent焦点事件组件得到或失去焦点ContainerEvent容器事件向容器内增加、减少组件WindowEvent窗口事件窗口最大化、最小化、关闭等低级事件列表事件的种类事件名称事件说明事件源触发条件ActionEvent行为事件文本框,按钮,组合框,定时器点击按钮;文本框输入时,按下回车键;定时器时间到;ItemEvent选项事件复选框,单选按钮,选项,列表选择列表选项TextEvent文本事件文本框,文本区域输入或改变文本内容AdjustmentEvent调整事件滚动条调整滚动条事件的种类事件类型接口名字接口中的方法ComponentEventComponentListenervoidcomponentHidden(ComponentEvente)voidcomponentMoved(ComponentEvente)voidcomponentResized(ComponentEvente)voidcomponentShown(ComponentEvente)ContainerEventContainerListenervoidcomponentAdded(ContainerEvent

e)componentRemoved(ContainerEvent

e)FocusEventFocusListenervoidfocusGained(FocusEvent

e)voidfocusLost(FocusEvent

e)KeyEventKeyListenervoidkeyPressed(KeyEvente)voidkeyReleased(KeyEvente)voidkeyTyped(KeyEvente)MouseEventMouseListenervoidmouseClicked(MouseEvente)voidmouseEntered(MouseEvente)voidmouseExited(MouseEvente)voidmousePressed(MouseEvente)voidmouseReleased(MouseEvente)MouseWheelEventMouseWheelListenermouseWheelMoved(MouseWheelEvent

e)常用的事件类型、与之对应的接口名字以及接口中的抽象方法事件的种类事件类型接口名字接口中的方法MouseEventMouseMotionListenervoidmouseDragged(MouseEvente)voidmouseMoved(MouseEvente)WindowEventWindowListenervoidwindowActivated(WindowEvente)voidwindowClosed(WindowEvente)voidwindowClosing(WindowEvente)voidwindowDeactivated(WindowEvente)voidwindowDeiconified(WindowEvente)voidwindowIconified(WindowEvente)voidwindowOpened(WindowEvente)ActionEventActionListeneractionPerformed(ActionEvente)ItemEventItemListeneritemStateChanged(ItemEvente)TextEventTextListenertextValueChanged(TextEvente)AdjustmentEventAdjustmentListeneradjustmentValueChanged(AdjustmentEvent

e)AncestorAncestorListenervoidancestorAdded(AncestorEventevent)void

温馨提示

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

评论

0/150

提交评论