第6章 AWT和Swing组件及事件处理.ppt
第6章 AWT/Swing组件及事件处理,6.1 图形用户界面概述6.2 GUI标准组件的使用6.3 Java的事件处理6.4 窗口及菜单设计6.5 图形界面的布局设计6.6 建立对话框,学习提要,掌握常用的GUI标准组件及图形界面的设计方法;掌握JAVA的事件处理机制和常用事件响应代码的编写方法;掌握布局、菜单及对话框的设计方法,6.1 图形用户界面概述,6.1.1 基本概念(1)GUI图形用户界面(Graphics User Interface)使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,帮助用户和计算机之间进行交互。(2)AWT抽象窗口工具集(abstract window toolkit)Java中用来生成图形用户界面的类库是java.awt包,它Java中基本包中最大的一个,定义了所有GUI组件类,以及其它用于构造图形界面的类。Sun公司在JDK1.0中就提供了AWT。为了实现跨平台特性,AWT类库中的各种操作被定义成在一个并不存在的“抽象窗口”中进行。,AWT组件的类层次,Component 组件是所有AWT组件的基类,提供了基本的显示和事件处理特征。,(3)Swing GUI组件,在最新的Java2中,javax.swing包被列入Java的基础类库JFC,其中定义的Swing GUI组件相对于java.awt包的各种GUI组件增加了许多功能。Swing组件类 Swing包含250多个类(有些是组件,有些是支持类,组件的名字都以 J 开头),Swing提供了40多个组件,是AWT的4倍,用轻量组件(没有本地对等组件)代替了AWT的重量组件(与本地对等组件相关联)。除模仿AWT组件所提供的功能外,几乎所有的Swing替代组件都有其他一些特性,如Swing按钮可以显示图标和文本,AWT按钮只显示文本。,(4)设计图形界面的步骤,1)根据需要创建界面元素,设计出界面的物理外观;2)定义界面元素对不同事件的响应,实现界面与用户的交互功能.,6.1.2 图形用户界面元素,分三类:容器、控制组件、用户自定义成分。(1)容器 是用来组织其他界面成分和元素的单元,如窗体(form)。主要作用:用容器可以分解图形界面的复杂性。特 点:容器有一定的范围、位置、背景,容器里可以包含许多其他的界面元素,并按一定规则来排列所包含的元素,可以被用来完成某种交互功能,容器还可能被包含在其他容器中。,(2)控制组件(Component),控件组件是图形界面的最小单位,里面不能再包含其他成分。如:命令按钮、文本域、标签等。控件的作用是完成与用户的一次交互,如接受用户指令、向用户显示文本等。,使用控件的步骤:,创建控件对象确定属性布局到容器中注册事件监听者重载事件处理方法。,TextField input=new TextField(6);add(input);input.addActionListener(this);public void actionPerformed(ActionEvent e)if(e.getSource()=input)output.setText(input.getText()+“,欢迎你!”);,6.1.3 用户自定义图形界面成分,用户自定义成分是指利用Java类库中的类及其方法来绘制符合用户特定要求的图形界面成分,也可以将已经存在的图形、动画等加载到当前程序中来。(1)绘制图形 Graphics类绘制直线、各种矩形、多边形、圆和椭圆等。Point类表示一个象素点 Dimension类表示宽和高 Rectangle类表示一个矩形 Polygon类表示一个多边形 Color类表示颜色,(2)显示文字,Java中用一个Font类的对象来表示一种字体显示效果,包括字体类型、字型和字号。Font.PLAIN 正常字型常量 Font.BOLD 粗体 Font.ITALIC 斜体1)创建字体对象Font MyFont=new Font(“TimesRoman”,Font.BOLD,12);2)使用字体对象 g.setFont(MyFont);/Graphics对象 btn.setFont(MyFont);/某个名为btn的按钮对象 可以用getFont()方法返回当前对象使用字体的情况。,(3)控制颜色,Applet中显示的字符串或图形的颜色可以用Color类的对象来控制,每个Color对象代表一种颜色,用户可以直接使用系统定义好的13种颜色常量,也可以通过红、绿、蓝三色比例来创建自己的Color对象。1)Color类的构造函数 public Color(int Red,int Green,int Blue);/每个参数的取值范围在0-255之间。public Color(float Red,float Green,float Blue);/每个参数的取值范围在0-1.0之间。public Color(int RGB);/指明RGB三色的比例,这个参数的0-7比特代表红色的比例,8-15比特代表绿色的比例,16-23比特代表蓝色的比例。,例:创建自己的颜色:Color blueColor=new Color(0,0,255);g.g.setColor(blueColor);利用系统的颜色常量:g.setColor(Color.cyan);2)GUI控件的颜色设置方法public void setBackground(Color c);/设置背景颜色public Color getBackground();/取得背景颜色public void setForeground(Color c);/设置前景颜色public Color getForeground();/取得前景颜色,(4)显示图象,Java中可以利用Graphics类的drawImage()方法显示图象。显示图象涉及3个方法:1)drawImage(参数1,参数2,参数3)参数1Image对象,可以用系统为Applet类定义的getImage()方法获得。参数2、参数3显示时图象左上角的X.Y坐标2)getImage(参数1,参数2)参数1图象文件所在的URL地址 参数2图象文件的文件名3)getDocumentBase()获取含有该Applet的HTML文件的URL地址。,例:用户界面使用示例TestGraphics.java,import java.awt.*;import java.applet.Applet;public class TestGraphics extends Applet Image myImage;Font myFont=new Font(黑体,Font.BOLD,20);Color myColor=new Color(120,25,180);public void init()myImage=getImage(getDocumentBase(),fys.jpg);,public void paint(Graphics g)g.drawLine(30,5,40,5);/画线g.setColor(Color.blue);/设置字体颜色 g.drawRect(40,10,50,20);/画空长方形 g.setColor(Color.red);setBackground(Color.yellow);/设置背静颜色 g.fillRect(60,30,70,40);/画实体长方形 g.setFont(myFont);g.drawString(大家好!,100,200);g.setColor(myColor);g.drawString(g.getFont().toString(),10,250);g.drawImage(myImage,150,10,this);/显示图片,(5)实现动画效果,用Java实现动画的原理与放映动画片类似,取若干相关的图象或图片,顺序、连续地在屏幕上先显示,后擦除,循环往复就可以获得动画的效果。小结:在设计和实现一个程序的图形用户界面的过程中,绘制用户自定义成分仅完成了部分工作,可以美化用户界面,但无法接收程序运行过程中的用户指令,不能提供与用户的动态交互,还需要通过Java中的事件处理机制来实现。,6.2 GUI标准组件的使用,常用的GUI标准组件AWT(Swing)介绍标签(Label)(J Label)Label有三个构造函数:Label()Label(String)Label(String,int)创建一个带初始字符串及指定对齐方式的标签 0=Label.LEFT、1=Label.RIGHT、2=Label.CENTERvoid setAlignment(int)方法用来设置标签对齐方式。,文本域(Textfield)(JTextfield)(JPasswordField 密码框)Textfield有四个构造函数:Textfield()Textfield(int)Textfield(String)Textfield(String,int)带有初始文本及指定长度,恢复密码显示:input2.setEchoChar(char)0);,Textfield对事件的响应,多行文本组件(TextArea)(JTextArea),多行文本组件有五个构造函数:TextArea()/创建一个多行文本框TextArea(int,int)/用指定的行数、列数创建 TextArea(String)/用指定的初始文本创建TextArea(String,int,int)/用指定的初始文本、行数、列数创建TextArea(String,int,int,int)/用指定的初始文本、行数、列数及滚动条创建事件响应与TextField相同。,按钮(Button)(JButton),按钮有两个构造函数:Button()Button(String Lable)/创建一个带标示字符串的按钮,可以改变外观但不改变功能,Button对事件的响应,单击按钮可以引发动作事件(ActionEvent)所在程序要实现ActionListener接口注册监听者 addActionListener()在实现接口的方法体中可以用e.getSource()方法获取按钮对象也可以用e.getActionCommand()方法获取按钮的标签或事先为该按钮设置的命令名例:Button bt=new Button(“按钮标签”);bt.setActionCommand(“命令名”);public void actionPerformed(ActionEvent e)if(e.getActionCommand()=“按钮标签”),或 e.getSource(),或 命令名,复选框组件(Checkbox)(JCheckbox),复选框有三个构造函数:Checkbox()/不带显示标签Checkbox(String)/带一个显示标签Checkbox(String,boolean)/带显示标签和初始状态复选框组件有状态属性,为on/off,默认情况下为off,Checkbox对事件的响应,判断事件源对象:public void itemStateChanged(ItemEvent e)If(e.getItemSelectable()instanceof Checkbox,对比按钮:public void actionPerformed(ActionEvent e)if(e.getSource()=bt1,单选钮组件(JRadioButton),单选钮组件要先用CheckboxGroup()方法构造一个CheckboxGroup对象,再用Checkbox(String,CheckboxGroup,boolean)方法创建Checkbox对象,如果不同的Checkbox在创建时属于同一个CheckboxGroup,则组成单选钮组。单选钮使用的构造函数:Checkbox(String,CheckboxGroup,boolean)/带显示标签、属于哪个按钮组和初始状态单选钮组件有状态属性,为true/false,创建时指定。,单选钮组件CheckboxGroup对事件的响应,CheckboxGroup类不是java.awt.*包中的类,它是Object的直接子类,所以按钮组不能响应事件,但是按钮组中的每个按钮可以响应ItemEvent类的事件。由于单选按钮组中的每个单选按钮都是Checkbox对象,它们对事件的响应与复选框对事件的响应相同。,下拉列表组件(Choice)(JComboBox),创建下拉列表:,Choice()/创建下拉列表(组合框),下拉列表组件(Choice)对事件的响应,列表组件(List)(JList),创建列表:,List()/创建列表List(int)/以指定的可见行数创建列表List(int,boolean)/指定可见行数和是否允许多项选择,列表组件(List)对事件的响应(注意:双击事件不能覆盖单击事件),滚动条组件(Scrollbar)(JScrollbar),滚动条有三个构造函数:,Scrollbar()/创建一个垂直滚动条Scrollbar(int)/指定方向的滚动条,Scrollbar.HORIZONTAL(水平状)Scrollbar.VERTICAL(垂直状)Scrollbar(int,int,int,int,int)/指定方向、初始值、滚动块大小、最小值、最大值,滚动条组件(Scrollbar)对事件的响应,6.3 Java的事件处理,6.3.1 基本概念 事件处理三要素:事件源、事件类型、事件监听者 事件源:图形用户界面的每个可能产生事件的组件。事件源可以注册监听者对象,并向其发送事件对象。事件类型:Java的所有事件都封装成一个类,这些事件类被集中在java.awt.event包中,所有的事件类都继承了AWTEvent类的一个方法getsSource(),该方法返回所发生事件的对象。事件监听者:不同类型的事件发生后,由事件监听者接收事件并调用相应的事件处理方法。监听者对象:实现了监听者接口的类的实例,具有监听和处理某类事件的功能。,Java的委托事件模型,JAVA的事件处理机制,JDK1.1开始引入了委托事件模型,不同的事件源可产生不同种类的事件,不同的事件由不同的监听者处理。事件发生后,事件源将事件对象发给已经注册的所有监听者;监听者对象随后会根据事件对象内封装的信息,决定自己该如何响应这个事件。,AWTEvent类体系结构图,EventObject,AWTEvent,AdjustmentEvent,WindowEvent,ContainerEvent,FocusEvent,InputEvent,PaintEvent,KeyEvent,MouseEvent,ActionEvent,ItemEvent,ComponentEvent,TextEvent,事件处理过程:一般说来,每个事件类都有一个监听者接口与之对应,而事件类中的每个具体事件类型都有一个具体的抽象方法与之相对应,当具体事件发生时,这个事件将被封装成一个事件类的对象作为实际参数传递给与之对应的具体方法,由这个具体方法负责响应并处理发生的事件。例如:与ActionEvent类事件对应的接口是ActionListener,这个接口定义了抽象方法:public void actionPerformed(ActionEvent e);,凡是要处理ActionEvent事件的类都必须:1)实现ActionListener接口 2)重载actionPerformed()方法 在重载的方法体中,常需要调用参数e的有关方法,如调用e.getSource查明ActionEvent事件的事件源,然后采取相应的措施处理该事件。事件适配器(Adapters):定义Listener时可以继承Adapters类,这样只需要重写自己需要的方法,其他方法不必实现,可以减少不必要的工作量。,6.3.2 动作事件(ActionEvent)的处理,能够触发动作事件的动作有:点击按纽 双击一个列表框中的选项 选择菜单项 在文本框中输入回车 动作事件对应的事件类是ActionEvent类,其主要方法有:(1)public String getActionCommand()获得引发事件的项目信息 例:public void actionPerformed(ActionEvent e)if(e.getActionCommand()=按钮标签),(2)public int getModifiers()当动作是同时与功能键配合使用时,获得引发事件的组合键信息,如:ALT_MASK动作事件对应的事件监听器是 ActionListener,其主要方法是:actionPerformed(ActionEvent e)发生动作事件时被调用实现动作事件的操作过程是:1)注册动作事件监听器 addActionListener(ActionListener)2)实现ActionListener接口的方法:actionPerformed(ActionEvent e),6.3.3 文本事件(TextEvent)的处理,TextEvent类只包含一个事件,即代表文本区域中文本变化的事件TEXT-VALUE-CHANGED,在文本区域中改变文本内容。例如,删除字符、键入字符都将引发这个事件。这个事件比较简单,不需要特别判断事件类型的方法和常量。Java中用于文本处理的基本组件有两种:单行文本框TextField和多行文本区域TextArea,它们都是TextComponent的子类。,例 6-7 TextComponentEvent.java,import java.applet.*;import java.awt.*;import java.awt.event.*;public class TextComponentEvent extends Applet implements TextListener,ActionListener TextField tf;TextArea ta;public void init()tf=new TextField(45);ta=new TextArea(10,45);add(tf);add(ta);tf.addActionListener(this);tf.addTextListener(this);,public void textValueChanged(TextEvent e)if(e.getSource()=tf)ta.setText(TextField)e.getSource().getText();public void actionPerformed(ActionEvent e)if(e.getSource()=tf)ta.setText();,6.3.4 选择事件(ItemEvent)的处理,ItemEvent类只包含一个事件,即代表选择项的选中状态发生变化的事件ITEM-STATE-CHANGED。引发这类事件的动作包括:(1)改变列表类List对象选项的选中或不选中状态。(2)改变下拉列表类Choice对象选项的选中或不选中状态。(3)改变复选按钮类Checkbox对象的选中或不选中状态。(4)改变检测盒菜单项CheckboxMenuItem对象的选中或不选中状态。,ItmeEvent类的主要方法有:,(1)public ItemSelectable getItemSelectable()此方法返回引发选中状态变化事件的事件源,包括List对象、Choice对象、Checkbox对象等。(2)public Object getItem()此方法返回引发选中状态变化事件的具体选择项,例如用户选中的Choice中的具体item,通过调用这个方法可以知道用户选中了哪个选项。(3)public int getStateChange()此方法返回具体的选中状态变化类型,它的返回值在ItemEvent类的几个静态常量列举的集合之内:ItemEvent.SELECTED:代表选项被选中。ItemEvent.DESELECTED:代表选项被放弃不选。,例 6-10 TestChoice.java,import java.applet.*;import java.awt.*;import java.awt.event.*;public class TestChoice extends Applet implements ItemListener Choice size;Button btn;public void init()size=new Choice();size.add(10);size.add(14);size.add(18);add(size);btn=new Button(效果);add(btn);size.addItemListener(this);,public void itemStateChanged(ItemEvent e)Choice temp;Font oldF;String s;int si;if(e.getItemSelectable()instanceof Choice)oldF=btn.getFont();temp=(Choice)(e.getItemSelectable();s=temp.getSelectedItem();si=Integer.parseInt(s);btn.setFont(new Font(oldF.getName(),oldF.getStyle(),si);,6.3.5 调整事件(AdjustmentEvent)的处理,AdjustmentEvent类只包含一个事件ADJUSTMENT-VALUE-CHANGED事件。与ItemEvent事件引发的离散状态变化不同,ADJUSTMENT-VALUE-CHANGED是GUI组件状态发生连续变化的事件,引发这类事件的具体动作有:(1)操纵滚动条(Scrollbar)改变其滑块位置。(2)操纵用户自定义的Scrollbar对象的子类组件,改变其滑块位置。,AdjustmentEvent类的主要方法有:,(1)public Adjustable getAdjustable()这个方法返回引发状态变化事件的事件源,能够引发状态变化事件的事件源都是实现了Adjustable接口的类。(2)public int getAdjustmentType()这个方法返回状态变化事件的状态变化类型,其返回值在AdjustmentEvent类的几个静态常量所列举的集合之内。AdjustmentEvent.BLOCK-DECREMENT:代表点击滚动条下方引发块状下移的动作。AdjustmentEvent.BLOCK-INCREMENT:代表点击滚动条上方引发块状上移的动作。AdjustmentEvent.TRACK:代表拖动滚动条滑块的动作。,AdjustmentEvent.UNIT-DECREMENT:代表点击滚动条下三角按钮引发最小单位下移的动作。AdjustmentEvent.UNIT-INCREMENT:代表点击滚动条上三角按钮引发最小单位上移的动作。通过调用getAdjustmentType()方法并比较其返回值,就可以得知用户发出的哪种操作引发了哪种连续的状态变动。(3)public int getValue()调用getValue()方法可以返回状态变化后的滑块对应的当前数值。滑块是可以连续调整的,调整将引发AdjustmentEvent事件,getValue()方法可以返回调整后滑块对应的最新数值。,例 6-12 TestSlider.java,import java.applet.*;import java.awt.*;import java.awt.event.*;public class TestSlider extends Applet implements AdjustmentListener Scrollbar mySlider;TextField sliderValue;public void init()setLayout(new BorderLayout();mySlider=new Scrollbar(Scrollbar.HORIZONTAL,0,100,0,Integer.MAX_VALUE);mySlider.setUnitIncrement(1);mySlider.setBlockIncrement(50);add(South,mySlider);mySlider.addAdjustmentListener(this);sliderValue=new TextField(30);add(Center,sliderValue);,public void adjustmentValueChanged(AdjustmentEvent e)int value;if(e.getAdjustable()=mySlider)value=e.getValue();sliderValue.setText(new Integer(int)value).toString();sliderValue.setBackground(new Color(value);,6.3.6 鼠标事件处理,触发鼠标事件的事件源通常是一个容器,当鼠标进入、离开、在容器中单击鼠标、拖动鼠标等,都会发生鼠标事件。鼠标事件对应的事件类是MouseEvent类,主要包含如下方法:public int getX()发生鼠标事件的X坐标public int getY()发生鼠标事件的Y坐标public int getButton()返回鼠标事件发生在哪个按键上public int getClickCount()返回鼠标点击事件的点击次数public boolean isPopupTrigger()返回鼠标事件是否为弹出菜单的触发器。,鼠标事件对应的事件监听器有两个:MouseListener(或MouseAdapter)对应鼠标事件,MouseMontionListener(或MouseMontionAdapter)对应鼠标移动事件,MouseListener(或MouseAdapter)的主要方法:MouseClicked(MouseEvent e)单击鼠标时的处理方法MouseEntered(MouseEvent e)鼠标进入时的处理方法MouseExited(MouseEvent e)鼠标离开时的处理方法MousePressed(MouseEvent e)鼠标按钮按下时的处理方法MouseReleased(MouseEvent e)鼠标按钮松开时的处理方法,MouseMontionListener(或MouseMontionAdapter)的主要方法:,MouseMoved(MouseEvent e)鼠标移动时的处理方法MouseDragged(MouseEvent e)拖动鼠标时的处理方法实现鼠标事件的过程:1)注册MouseListener监听器addMouseListener(),当事件源所在的类已经实现MouseListener接口时,参数可用this,否则需要创建或继承一个MouseListener。2)实现MouseListener接口的5个主要方法。鼠标移动事件的实现与此类似。,例:鼠标响应 ResponseToMouse.java,import java.applet.*;import java.awt.*;import java.awt.event.*;public class ResponseToMouse extends Applet implements MouseListener,MouseMotionListener String s=shubiao;public void init()this.addMouseListener(this);this.addMouseMotionListener(this);public void mouseClicked(MouseEvent e)if(e.getClickCount()=1)showStatus(您在(+e.getX()+,+e.getY()+)单击了鼠标左键。);else if(e.getClickCount()=2)showStatus(您在(+e.getX()+,+e.getY()+)双击了鼠标。);,public void mouseEntered(MouseEvent e)showStatus(鼠标进入Applet。);public void mouseExited(MouseEvent e)showStatus(鼠标离开Applet。);public void mousePressed(MouseEvent e)s=您按下了鼠标。;repaint();public void mouseReleased(MouseEvent e)s=“您松开了鼠标。;repaint();public void mouseMoved(MouseEvent e)showStatus(您移动了鼠标,新位置在(+e.getX()+,+e.getY()+)。);public void mouseDragged(MouseEvent e)showStatus(您拖动了鼠标。);,6.3.7 键盘事件处理,在具有键盘焦点的组件中按下或释放键盘等操作时,都会发生键盘事件。键盘事件对应的事件类是KeyEvent类,Java.awt.event.KeyEvent主要方法有:getKeyCode()获得按下或释放的键代码getKeyText()获得按下或释放的键的字符串 键盘事件对应的事件监听器为:KeyListener 或KeyAdapter。KeyListener的主要方法:keyPressed(KeyEvent e)按下键时的处理方法keyReleased(KeyEvent e)释放键时的处理方法keyTyped(KeyEvent e)按下非系统键时的处理方法,6.3.8 窗口事件处理,有Window及其扩展(Frame、Dialog)等才能激发窗口事件。窗口事件对应的类为WindowEvent,监听器为WindowListener(或WindowAdapter),其主要方法有:windowOpened(WindowEvent e)打开窗口windowClosed(WindowEvent e)关闭窗口windowClosing(WindowEvent e)窗口正在被关闭windowActivated(WindowEvent e)激活状态的事件处理windowDeactivated(WindowEvent e)无效状态的事件处理,WindowEvent类的主要方法 public window getWindow();返回引发当前事件的具体窗口,与getSource()方法返回的是相同的事件引用,但getSource()返回类型是Object,而getWindow()返回的是具体的Window对象。实现窗口事件的操作过程一般用到适配器,步骤:1)注册 WindowListener 监听器 addWindowListener(),参数用WindowAdapter;2)实现WindowAdapter接口的若干方法。,6.4.1 面板组件(Panel)(JPanel)Panel属于无边框容器,无边框容器包括Panel和Applet,其中Panel是Container的子类,Applet是Panel的子类。创建面板:Panel()/用默认的布局管理器(FlowLayout)创建 面板 Panel(LayoutManager layout)/用指定的布局管理器(FlowLayout)创建面板,6.4 窗口及菜单设计,6.4.2 框架窗口组件(Frame)(JFrame),Frame是独立于浏览器的可独立运行的主窗口,通常用于开发桌面应用程序。Frame拥有边界和标题栏设置,大小、内容可以调整。Frame是容器,里面需要加入组件,也可以加入菜单,可以在上面绘图。Frame的创建Frame()创建一个没有窗口标题的窗口框架Frame(String)创建一个指定窗口标题的窗口框架,Frame的主要方法,6.4.5 菜单组件,菜单栏(MenuBar)(JMenuBar)菜单组件 菜单(Menu)(JMenu)菜单项(MenuItem)(JMenuItem)一般菜单栏放置在Frame窗口中,只要调 用setMenuBar()方法即可。,菜单项,菜单,菜单栏,1.菜单栏MenuBar,(1)创建菜单栏:MenuBar()(2)MenuBar的主要方法,2.菜单Menu,(1)用指定标签创建菜单:Menu(String)(2)Menu的主要方法,3.菜单项MenuItem,(1)用指定标签创建菜单项:MenuItem(String)(2)MenuItem的主要方法,4.子菜单项CheckboxMenuItem(带勾),(1)用指定标签创建一个可选菜单项:CheckboxMenuItem(String)(2)用指定标签和初始状态创建一个可选菜单项:CheckboxMenuItem(String,boolean)(3)MenuItem的主要方法,5.快捷菜单PopupMenu,(1)用指定标签创建菜单:PopupMenu(String)(2)PopupMenu的主要方法,6.5 图形界面的布局设计,每一个容器组件都有一个默认的布局管理方式,也可以用setLayout方法来设置其他布局管理器。一旦确定了布局管理方式,容器组件就可以用add方法加入组件。布局管理器用来确定组件在容器中的位置和大小,AWT中定义了布局管理器接口LayoutManager的实现类来实现此功能。,LayoutManager的实现类:,FlowLayout BorderLayout GridLayout GridBagLayout CardLayout null,6.5.1 FlowLayout布局管理器,FlowLayout是一种最简单的布局管理,是Panel的默认布局。它以流式自左向右、自上而下地放置容器中的组件,其默认方式为居中对齐方式,也可以手工设置左对齐或右对齐。,创建默认的FlowLayout布局管理器:FlowLayout()以指定的对齐方式创建:FlowLayout(int)以指定的对齐方式及间距创建FlowLayout布局管理器:FlowLayout(int,int,int),FlowLayout.LEFT FlowLayout.RIGHT FlowLayout.CENTER,对齐方式,组件行间距,组件列间距,6.5.2 BorderLayout布局管理器,BorderLayout是Frame和Dialog的默认布局。它将整个容器分为东、西、南、北、中5个部分,加入组件时需要指明放置的位置。创建默认的BorderLayout布局管理器:BorderLayout()以指定的行、列间距创建BorderLayout布局管理器:BorderLayout(int,int),组件行间距,组件列间距,BorderLayout的主要方法,6.5.3 GridLayout布局管理器,GridLayout布局将容器划分成m行x n列大小相同的格子,组件放在格子中。创建默认的GridLayout布局,所有组件在一行显示:GridLayout()以指定的行数、列数创建GridLayout布局:GridLayout(int,int)以指定的行数、列数、行间距、列间距创建布局:GridLayout(int,int,int,int),GridLayout的主要方法,import java.applet.*;import java.awt.*;import java.awt.event.*;public class TestGridLayout exten