您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第9章AWT组件及应用.
2019/12/19计算机学院1第9章AWT组件及应用9.1AWT容器9.2布局管理器9.3事件处理机制9.4Graphics类9.5AWT绘图9.6综合实例2019/12/19计算机学院2第9章AWT组件及应用AWT中的图形元素可以分为两类:基本组件Component和容器Container。图9.1列出了AWT中的主要相应包及类之间的层次关系。Java.lang.ObjecteventMenuConponentComponentGraphicsfontToolkit各种布局管理器ContainerPanelWindowScrollPaneAppletFraneDialogButtonLabelChechboxListChoiceCanvasTextFieldTextArea图9.1AWT的类层次结构2019/12/19计算机学院39.1AWT容器9.1.1Window和FrameWindow是不依赖于其他容器而独立存在的容器。Window有两个子类:Frame和Dialog。Frame带有标题,而且可以调整大小。Dialog可以被移动,但是不能改变大小。Frame有一个构造方法Frame(Stringtitle),通过它可以创建一个以参数为标题的Frame对象。Frame的add()方法向容器中加入其他组件。当Frame被创建后,它是不可见的,必须通过以下步骤使Frame成为可见的。(1)调用setSize(intwidth,intheight)显式设置Frame的大小,或者调用pack()自动确定Frame的大小。pack()方法确保Frame容器中的组件与窗体相适用的大小。(2)调用setVisible(true)方法使Frame成为可见。2019/12/19计算机学院49.1.1Window和Frame【例9.1】创建一个Frame对象并使用Frame类的常用方法。MyFrame.javapackageorg.awt;importjava.awt.*;publicclassMyFrame{publicstaticvoidmain(Stringargs[]){Framefr=newFrame();fr.setTitle(ThisisaFrame);//设定窗体标题fr.setSize(400,300);//设定窗体的宽度为400,高度为300fr.setBackground(Color.green);//设定窗体的背景色为绿色fr.setLocation(300,500);//设定窗体左上角的初始位置为(300,500)fr.setResizable(false);//设定窗体为不可调整大小fr.setVisible(true);//将窗体设为可见}}2019/12/19计算机学院59.1.1Window和Frame程序运行结果如图9.2所示。图9.2一个Frame2019/12/19计算机学院69.1.2Panel面板Panel是一个通用的容器,它没有边框或其他可见的边界,不能移动、放大、缩小或关闭,不能单独存在,只能存在于其他容器(Window或其子类)中。一个Panel对象代表一个区域,在这个区域中可以容纳其他的组件。Panel的add()方法向Panel中添加组件。如要使Panel成为可见的,必须通过Frame或Window的add()方法把Panel添加到Frame或Window中。Frame的setBounds(intx,inty,intwidth,intheight)方法移动组件并调整其大小,由x和y指定左上角的新位置,由width和height指定新的大小。【例9.2】创建4个Panel对象,并将它们添加到窗体上。2019/12/19计算机学院79.1.2Panel程序运行结果如图9.3所示。图9.3窗体加载Panel2019/12/19计算机学院89.2布局管理器1.流式布局管理器FlowLayout是把组件从左向右、从上向下,一个接一个的放到容器中,组件之间的缺省间隔(水平和垂直)为5个像素,缺省的组件对齐方式为居中。组件的大小由布局管理器根据组件的最佳尺寸来决定。FlowLayout的构造方法如下:FlowLayout(intalign,inthgap,intvgap)功能:参数align用来决定组件在每行中相对于容器的边界的对齐方式。可选值有:FlowLayout.LEFT(左对齐)、FlowLayout.RIGHT(右对齐)和FlowLayout.CENTER(居中对齐)。参数hgap和参数vgap分别设定组件之间的水平和垂直间隙。2019/12/19计算机学院99.2布局管理器2.边界布局管理器BorderLayout是Window、Frame、Dialog的缺省布局管理器,它将容器分成五个区域来安排组件:North、South、East、West、Center。BorderLayout的构造方法如下:BorderLayout(inthgap,intvgap)参数hgap和vgap分别设定组件之间的水平和垂直间隙。对于采用BorderLayout的容器,当它用add()方法添加一个组件时。可以同时指定组件在容器中的区域,如下所示。voidadd(Componentcomp,Objectconstraints)这里的constraints是String类型,可选值为BorderLayout提供的5个常量。下面的代码把Button放在Frame的东边区域,如下所示。Framefr=newFrame();fr.add(newButton(bt),BorderLayout.EAST);如果不指定add()方法的constraints参数,在默认的情况下把组件放在中区域。下面的代码向Frame的中间区域加入两个Button,但只有最后加入的Button是可见的,如下所示,Framefr=newFrame();fr.add(newButton(b1));fr.add(newButton(b2));fr.setSize(200,200);fr.setVisible(true);2019/12/19计算机学院109.2布局管理器3.网格布局管理器GridLayout是将容器分成一个个格子,按行依次排列组件,各组件大小相同。GridLayout的构造方法如下:GridLayout(introws,intcols,inthgap,intvgap):rows代表行数,cols代表列数,hgap和vgap规定网格之间的水平和垂直间隙。4.卡片布局管理器CardLayout将界面看成一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。CardLayout的构造方法:CardLayout(inthgap,intvgap)参数hgap表示卡片和容器的左右边界之间的间隙,参数vgap表示卡片和容器的上下边界的间隙。对于采用CardLayout的容器,当用add()方法添加一个组件时,需要同时为组件指定所在卡片的名字,如下所示:voidadd(Componentcomp,Objectconstraints)2019/12/19计算机学院119.3事件处理机制在Java中,监听器对象是一个实现了特定监听器接口的类的实例。事件源是一个能够注册监听器对象并发送事件对象的对象。用户对组件的一个操作,称之为一个事件,当事件发生时,事件源将事件对象传递给所有注册的监听器。监听器对象将利用事件对象中的信息决定如何对事件做出响应。在图9.4中,Frame是一个事件源,它可以触发键盘事件和鼠标事件等。键盘事件对应一个键盘监听器,它会在键按下和释放时响应。Frame注册了键盘监听器,所以它触发的键盘事件将被处理。对于Frame触发的鼠标事件,由于没有注册相应的鼠标监听器,所以这种事件不会被处理。事件源(Frame)KeyEventMouseEvent键盘监听器(keyListener)keyPressed(){…}keyReleased(){…}②触发触发③接收①注册图9.4Frame的触发事件2019/12/19计算机学院129.3.1AWT事件与监听器每个具体的事件都是某种事件类的实例,事件类包括:ActionEvent、ItemEvent、MouseEvent、KeyEvent和WindowEvent等。事件类的类层次结构如图9.5所示。AWTEventTextEventItemEventComponentEventAdjustmentEventWindowEventActionEventPaintEventInputEventKeyEventMouseEventEventObject图9.5事件类的类层次结构2019/12/19计算机学院139.3.1AWT事件与监听器要处理一个对象所产生的事件,首先必须注册该对象的监听者。java.awt.event包按照不同的事件类型定义了11个监听器接口,每类事件都有对应的事件监听器,监听器是接口,接口中定义了事件发生时可调用的方法,一个类可以实现监听器的一个或多个接口。表9.1列出了AWT事件的监听器接口。2019/12/19计算机学院149.3.2窗口事件WindowEvent类对应窗口事件,包括用户单击了关闭按钮,窗口得到与失去焦点,窗口最小化等。窗口事件对应的事件监听器是WindowListener。【例9.3】一个数如果恰好等于它的因子之和,这个数就称为“完数”。运行程序,在文本框中输入数字1000,按下回车符,则将1000之内的是完数的及构成完数的因子写入到文本区里,如图9.6所示。图9.6求1000之内的完数2019/12/19计算机学院159.3.3鼠标事件MouseEvent类对应鼠标事件,包括鼠标按下、释放、单击等事件。鼠标事件对应的事件监听器是MouseListener。【例9.4】设计一个窗口,上面有一个按钮。当鼠标移到按钮上时,立即隐藏该按钮;当鼠标离开按钮时,显示该按钮。运行程序,当鼠标单击“隐藏按钮”时,按钮不可见,鼠标移开时,按钮又显示在窗体上,如图9.7所示。图9.7隐藏按钮2019/12/19计算机学院169.3.4键盘事件在Java中与键盘事件有关的接口和类有KeyListener、KeyAdapter及KeyEvent。其中KeyListener和KeyAdapter用于监听键盘事件的发生并将其传送到相应的事件处理方法中去,而KeyEvent主要用于提供事件发生时的有关信息。KeyListener接口能够监听的键盘事件有3种:键按下(Pressed)、键释放(Released)及键的按下并释放(Typed),相应的事件处理方法如下:(1)publicvoidkeyTyped(KeyEvente):当键盘上的一个键被按下并释放后该方法被调用(2)publicvoidkeyPressed(KeyEvente):当键盘上的一个键盘被按下后该方法被调用(3)publicvoidkeyReleased(KeyEvente):当键盘上的一个键盘被释放时该方法被调用2019/12/19计算机学院179.3.4键盘事件KeyEvent类中常用的方法如下:(1)publicintgetKeyCode():返回键盘事件中相关键的整数类型键码(2)publicchargetKeyChar():返回键盘事件中相关键的字符类型键码,例如,对于Shift+a键返回的字符是A。(3)publicstaticStringgetKeyText(intkeyCode):返回一个描述由参数intkeyCode指定的键的字符串,如HOME、F1或A等。(4)publicStringparamString():返回一个标识该事件的参数字符串。【例9.5】创建了一个文本框和4个文本区,文本框用来接受键盘的输入并注册了键盘事件监听器在前3个文本区中分别显示在Pressed、Released、Typed方法中相关联的键所对应的字符。2
本文标题:第9章AWT组件及应用.
链接地址:https://www.777doc.com/doc-2113272 .html