您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > JAVA编程-AWT图形用户界面
第7章AWT图形用户界面AWT与SwingJava1.0的出现带来了抽象窗口工具箱(AWT)。设计目标是希望构建一个通用的GUI,使得利用它编写的程序能够运行在所有的平台上,以实现Sun公司提出的口号“一次编写,随处运行”。在Java1.2中,Sun公司推出了新的用户界面库:Swing。相对AWT来说,Swing功能更强大、使用更方便,它的出现使得Java的图形用户界面上了一个台阶。但是,Swing并没有代替AWT。在Java1.1中,AWT事件处理模型有了根本改变。Swing使用的仍然是Java1.1的事件处理模型。AWT在实际的运行过程中是调用所在平台的图形系统,因此同样一段AWT程序在不同的操作系统平台下运行所看到的图形系统是不一样的。例如在windows下运行,则显示的窗口是windows风格的窗口;而在UNIX下运行时,则显示的是UNIX风格的窗口。Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级(light-weight)组件,没有本地代码,不依赖操作系统的支持。AWT抽象窗口工具包AWT(AbstractWindowToolkit)是API为Java程序提供的建立图形用户界面GUI工具集AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括:用户界面组件;事件处理模型;图形和图像工具,包括形状、颜色和字体类;布局管理器,可以进行灵活的窗口布局而与特定窗口的尺寸和屏幕分辨率无关;数据传送类,可以通过本地平台的剪贴板来进行剪切和粘贴。java.awt包中提供了GUI设计所使用的类和接口。java.awt包提供了基本的java程序的GUI设计工具。主要包括下述三个概念:组件--Component容器--Container布局管理器--LayoutManager组件、容器、布局管理器Java的图形用户界面的最基本组成部分是组件组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。基本组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。容器本身也是一个组件,具有组件的所有性质,但是它的主要功能是容纳其它组件和容器。布局管理器(LayoutManager):每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。7.1AWT容器Container:用来装其他组件Window:不依赖其他容器,独立存在(一个简单的窗口框)Frame(窗体):有标题,可调整大小等Dialog(对话框):可以移动,但不能调整大小Panel:不能独立存在,需嵌入其他容器Applet容器常用方法addremovesetLayoutsetFontFrame类一般我们要生成一个窗口,不直接用到Window类。用Window的子类Frame来进行实例化。也可以创建自己的Frame类(要从Frame继承),进行实例化。Frame的外观就像我们平常在windows系统下见到的窗口,有标题、边框、菜单、大小等等。构造方法publicFrame();publicFrame(Stringtitle);每个Frame的对象实例化以后,都是没有大小和不可见的,因此必须调用setSize()来设置大小,调用setVisible(true)来设置该窗口为可见的。Frame中比较重要的成员方法setBounds(intx,inty,intwidth,intheight)设置窗体位置和大小,x、y是左上角坐标,width、height为宽度和高度。setSize(intwidth,intheight)设置窗体大小。setLocation(intx,inty)设置窗体位置。setVisable(booleanb)设置窗体是否可见。setBackGround(Colorc)设置窗体背景颜色。importjava.awt.*;publicclassTest{publicstaticvoidmain(Stringargs[]){Framefr=newFrame(HelloOutThere!);fr.setSize(200,200);fr.setBackground(Color.red);fr.setVisible(true);}}【例7-1】Frame中若干重要方法示例classMultiFrameextendsFrame{staticintid=0;MultiFrame(intx,inty,intw,inth,Colorcolor){super(Frame+(++id));//设置Frame的标题setBackground(color);//设置背景色setLayout(null);//设置布局管理器为nullsetBounds(x,y,w,h);//设置Frame窗体位置和大小setVisible(true);//设置Frame可见}}importjava.awt.*;publicclassTest7_1{publicstaticvoidmain(Stringargs[]){MultiFramef1=newMultiFrame(50,50,100,100,Color.BLUE);MultiFramef2=newMultiFrame(150,50,100,100,Color.YELLOW);MultiFramef3=newMultiFrame(50,150,100,100,Color.GREEN);MultiFramef4=newMultiFrame(150,150,100,100,Color.MAGENTA);}}PanelPanel本身不能独立存在Panel对象创建后必须使用其容器的add方法,将其加入某个容器对象(Frame对象)Panelp=newPanel()创建Panel类对象Applet是Panel类的子类,因此不能独立存在,Applet在运行时要么通过appletviewer查看器运行,要么需要嵌套在html文档中在Web浏览器中运行。【例7-2】Panel类使用示例importjava.awt.*;publicclassTest7_2{publicstaticvoidmain(String[]args){Framef=newFrame(包含Panel的Frame);//创建Panel对象,参数null为布局管理器设置Panelp=newPanel(null);f.setLayout(null);//设置Frame的布局管理器为nullf.setBounds(200,200,300,300);f.setBackground(Color.BLUE);//设置Frame背景色p.setBounds(50,50,200,200);p.setBackground(Color.CYAN);//设置Panel背景色f.add(p);//将Panel类对象添加到Frame中f.setVisible(true);}}7.2布局管理器java为了实现跨平台的特性并且获得动态的布局效果,java将容器内的所有组件安排给一个“布局管理器”负责管理,如:排列顺序,组件的大小、位置,当窗口移动或调整大小后组件如何变化等功能授权给对应的容器布局管理器来管理,不同的布局管理器使用不同算法和策略,容器可以通过选择不同的布局管理器来决定布局。FlowLayout(流式布局)BorderLayout(边界布局)GridLayout(网格布局)CardLayout(卡片布局)GridBagLayout7.2.1FlowLayout流布局管理器FlowLayout是最简单的布局管理器,该类是Object类的直接子类。FlowLayout的布局策略是按照组件的添加次序依次将它们从左到右放置到容器中。当一行排满之后就转到下一行继续从左到右排列,且每一行中的组件都居中排列。FlowLayout是Applet缺省使用的布局策略。创建布局管理器对象:将容器设置为布局管理器setLayout(LayoutManagermgr)将组件加入容器add(Componentcomp)publicFlowLayout()居中对齐的,默认的水平和垂直间隙是5个单位。publicFlowLayout(intalign)具有指定的对齐方式,默认的水平和垂直间隙是5个单位。publicFlowLayout(intalign,inthgap,intvgap)它具有指定的对齐方式以及指定的水平和垂直间隙。【例7-3】使用FlowLayout布局管理器示例importjava.awt.*;classFlowLayoutTestextendsFrame{publicFlowLayoutTest(){this.setBounds(50,50,200,200);//设置布局管理器为FlowLayout类型this.setLayout(newFlowLayout());for(inti=0;i5;i++){this.add(newButton(Button+(i+1)));}this.setVisible(true);}}publicclassTest7_3{publicstaticvoidmain(String[]args){newFlowLayoutTest();}}【例7-4】使用pack方法让系统管理Frame的大小importjava.awt.*;classFlowLayoutTestextendsFrame{publicFlowLayoutTest(){//设置布局管理器为FlowLayout类型this.setLayout(newFlowLayout());for(inti=0;i5;i++){this.add(newButton(Button+(i+1)));}pack();this.setVisible(true);//设置可见}}publicclassTest7_3{publicstaticvoidmain(String[]args){newFlowLayoutTest();}}7.2.2BorderLayout边框布局管理器布局策略:提供了5个区域,而每个区域只允许添加一个组件。在加入组件的时候,需要指明其加入的位置BorderLayout.NORTHBorderLayout.SOUTHBorderLayout.WESTBorderLayout.EASTBorderLayout.CENTER也可以使用字符串“North”、“South”、“West”、“East”和“Center”来标明。BorderLayout是Frame和Dialog的默认布局管理器。创建布局管理器对象:将容器设置为布局管理器将组件加入容器在向设置为BorderLayout的布局管理策略的容器中添加组件时,必须指明添加位置,如果未指明,则默认添加到Center区域,新添加的组件会覆盖原来的组件。add(Componentcomp,Objectconstraints)publicBorderLayout()构造一个组件之间没有间距的新边框布局publicBorderLayout(inthgap,intvgap)构造一个具有指定组件间距的边框布局。水平间距由hgap指定,垂直间距由vgap指定【例7-4】使用BorderLayout布局管理器示例importjava.awt.*;classBorderLayoutTestextendsFrame{publicBorderLayoutTest(){super(BorderLayoutTest);this.setBounds(50,50,300,200);//创建布局对象,并将容器进行布局设置this.setLayout(newBorderLayout());//将组件加入容器this
本文标题:JAVA编程-AWT图形用户界面
链接地址:https://www.777doc.com/doc-6372391 .html