您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Java-AWT-图形用户界面
十七、图形用户界面AWT包的类层次结构AWT组件的优点是简单、稳定,兼容于任何一个JDK版本,缺点是依赖于本地操作系统的GUI,缺乏平台独立性。每个AWT组件都有一个同位体(peer),它们位于java.awt.peer包中,这些peer负责与本地操作系统进行交互,而本地操作系统负责显示和操作组件。由于AWT组件与本地平台的GUI绑定,因此用AWT组件创建的图形界面在不同的操作系统中会有不同的外观。================================================================================================抽象类Component是所有除了菜单类组件之外的AWT组件的父类。Container类表示容器,用来存放别的组件。有两种类型的容器:Window和Panel。Window类是不依赖于其他容器而独立存在的容器。Frame类带有标题,而且可以调整大小。Dialog类可以被移动,但是不能改变大小。Frame类通过构造方法Frame(Stringtitle)可以创建一个以参数为标题的Frame对象。Frame的add()方法向容器中加入其他组件。当Frame被创建后,它是不可见的,必须通过以下步骤使其可见:1)调用setSize(intWidth,intheight)显式设置Frame的大小,或者调用pack()方法自动确定大小。pack()方法会确保Frame容器中的组件会有与布局相适应的合理大小。2)调用setVisible(true)方法使Frame成为可见。ObjectComponentContainerButtonCanvasCheckboxChoiceLabelListScrollbarTextComponentPanelScrollPanelWindowDialogFrameFileDialogAppletMenuBarMenuItemMenuCheckboxMenuItemCardLayoutFlowLayoutGridBagConstraintsGridBagLayoutGridLayoutCheckboxGroupColorDimensionEventBorderLayoutPointFontMetricsGraphicsImagePolygonRectangleMenuComponentInsetsFontPopupMenuToolkitTextAreaTextFieldGraphics2DSystemColorExceptionAWTExceptionErrorAWTError【例程】SimpleFrame类的main()方法创建了一个Frame对象,并向Frame中加入了一个Button对象。1importjava.awt.*;2publicclassSimpleFrame{3publicstaticvoidmain(String[]args){4Framef=newFrame(hello);5f.add(newButton(PressMe));6f.setSize(100,100);//设置Frame的宽和高7f.setVisible(true);//使Frame变为可见8}9}【说明】以上代码将显示一个带Button的Frame,这个Button充斥了整个Frame空间。如果把f.add(newButton(PressMe))语句移动到f.setVisible(true)语句之后,再运行程序,将会发现Button没有被显示,这是因为当执行f.setVisible(true)语句时,Frame按照其当时的状态显示界面,接下来添加或删除Frame中的组件,Frame的形状是不会自动更新的,除非再调用f.validate()方法使容器重新布置界面。--------------------------------------------------------------------------------------------------------------------------------------------------------------Panel类不能单独存在,只能存在于其他容器中(Window或其子类),一个Panel对象代表了一个长方形的区域,在这个区域中可以容纳其他的组件。可以通过Panel类的默认构造方法来创建一个Panel对象,然后通过Panel的add()方法向Panel中添加组件。如果要使Panel可见,必须通过Frame或Window的add()方法把Panel添加到Frame或Windows中。【例程】SimplePanel类的main()方法创建了一个Frame对象,一个Panel对象和一个Button对象。Button被加入到Panel中,Panel又被加入到Frame中。1importjava.awt.*;2publicclassSimplePanel{3publicstaticvoidmain(String[]args){4Framef=newFrame(hello);5Panelp=newPanel();6p.add(newButton(pressme));7p.setBackground(Color.YELLOW);//设置Panel的背景着色8f.add(p);//把Panel加入到Frame中9f.setSize(100,100);10f.setBackground(Color.BLUE);//设置Frame的背景色11f.setVisible(true);12}13}【说明】以上代码将显示一个带黄色的Panel的Frame。这个Panel充斥了整个Frame空间。Panel中有一个Button。================================================================================================布局管理器决定组件在容器中的位置和尺寸。所有容器都会引用一个布局管理器的实例,通过它来自动进行组件的布局管理。当一个容器被创建后,它们有相应的默认布局管理器。Window、Frame、Dialog的默认布局管理器是BorderLayout;Panel、Applet的默认布局管理器是FlowLayout。通过setLayout()方法可以重新设置容器的布局管理器。如果不希望通过布局管理器来管理布局,可以调用容器的setLayout(null)方法,这样布局管理器被取消了。接下来必须调用容器中每个组件的setLocation()、setSize()或setBound()方法,为这些组件在容器中一一定位。这种手工布局将导致图形界面的布局不再是和平台无关的。相反,图形界面的布局将依赖于操作系统环境。【例程】ManualLayout类取消了布局管理器,然后按照手工布局把一个Button加入到Frame中。1importjava.awt.*;2publicclassManualLayout{3publicstaticvoidmain(String[]args){4Framef=newFrame(hello);5f.setLayout(null);//取消布局管理器6f.setSize(300,100);//宽300,高1007Buttonb=newButton(pressme);8b.setSize(100,30);//宽100,高309b.setLocation(40,60);//x坐标40,y坐标6010f.add(b);11f.setVisible(true);12}13}--------------------------------------------------------------------------------------------------------------------------------------------------------------FlowLayout流式布局管理器FlowLayout按照组件的添加次序将它们从左到右地放置在容器中。当到达容器边界时,组件将放置在下一行中。FlowLayout允许左对齐、居中对齐(默认方式)或右对齐的方式排列组件。FlowLayout有以下特性:不限制它所管理的组件的大小,而是允许它们有自己的最佳大小。当容器被缩放时,组件的位置可能会变化,但组件的大小不会改变。FlowLayout的构造方法如下:FlowLayout()FlowLayout(intalign)FlowLayout(intalign,inthgap,intvgap)参数align用来决定组件在每行中相对于容器的边界的对齐方式,可选值有:FlowLayout.LEFT左对齐FlowLayout.RIGHT右对齐FlowLayout.CENTER居中对齐参数hgap和参数vgap分别设定组件之间的水平和垂直间隙。【例程】FlowLayoutDemo类中,Frame采用FlowLayout布局,在Frame中加入了3个Button,单击leftButton按钮,就会采用左对齐方式,单击centerButton按钮,就会采用居中对齐方式,单击rightButton按钮,就会采用右对齐方式。1importjava.awt.*;2importjava.awt.event.*;3publicclassFlowLayoutDemo{4publicstaticvoidmain(String[]args){5finalFramef=newFrame(hello);6finalFlowLayoutfl=newFlowLayout();7f.setLayout(fl);8//单击则左对齐9ButtonleftButton=newButton(left);10leftButton.addActionListener(newActionListener(){//注册事件监听器11publicvoidactionPerformed(ActionEventevent){12fl.setAlignment(FlowLayout.LEFT);//左对齐13fl.layoutContainer(f);//使Frame重新布局14}15});16//单击则居中对齐17ButtoncenterButton=newButton(center);18centerButton.addActionListener(newActionListener(){//注册事件监听器19publicvoidactionPerformed(ActionEventevent){20fl.setAlignment(FlowLayout.CENTER);//居中对齐21fl.layoutContainer(f);//使Frame重新布局22}40060100300yx1003023});24//单击则右对齐25ButtonrightButton=newButton(right);26rightButton.addActionListener(newActionListener(){//注册事件监听器27publicvoidactionPerformed(ActionEventevent){28fl.setAlignment(FlowLayout.RIGHT);//右对齐29fl.layoutContainer(f);//使Frame重新布局30}31});32f.add(leftButton);33f.add(centerButton);34f.add(rightButton);35f.setSize(300,100);36f.setVisible(true);37}38}【说明】如果改变Frame的大小,每个Button的尺寸不变,不过Button与Frame之间的相对位置会发生变化
本文标题:Java-AWT-图形用户界面
链接地址:https://www.777doc.com/doc-5502899 .html