1、第第1212章章图形界面设计图形界面设计1本章主要内容n12.1 图形用户界面设计图形用户界面设计n12.2 图形用户界面工具包图形用户界面工具包Swingn12.3 创建组件创建组件n12.4 布局管理器布局管理器212.1 图形用户界面设计图形用户界面设计n图形用户界面图形用户界面(Graphics User Interface,GUI)n用图形的方式,借助菜单。按钮等标准界面元素用图形的方式,借助菜单。按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出和鼠标操作,帮助用户方便地向计算机系统发出指令、启动操作,并将系统运行的结果同样以图指令、启动操作,并将系统运行的结果同样以图形
2、方式显示给用户的技术。形方式显示给用户的技术。nJava的的GUI程序设计是程序设计是Java程序设计的基础。程序设计的基础。312.1 图形用户界面设计图形用户界面设计nJava提供的两个处理图形用户界面的类库提供的两个处理图形用户界面的类库:Java.awt包和包和javax.swing包包 Sun已经提供了一个跨平台已经提供了一个跨平台GUI开发工具包开发工具包java.awt(抽(抽象窗口工具箱)象窗口工具箱)Sun又开发了一个新的又开发了一个新的GUI开发工具包开发工具包javax.swing解决了解决了awt中存在的本地化中存在的本地化问题问题412.1 图形用户界面设计图形用户界
3、面设计nAWT 和和 Swing 是是 Java 设计设计 GUI 用户界面的基础用户界面的基础.n与与AWT 的重量级组件不同的重量级组件不同,Swing 中大部分是中大部分是轻量级组轻量级组件件。正是这个原因正是这个原因,Swing 几乎无所不能几乎无所不能,不但有各式各不但有各式各样先进的组件样先进的组件,而且更为美观易用而且更为美观易用.所以一开始使用所以一开始使用 AWT 的程序员很快就转向使用的程序员很快就转向使用 Swing 了了。n但是但是因为因为 Swing 是架构在是架构在 AWT 之上的之上的,没有没有 AWT 就没就没有有 Swing。所以程序员可以根据自己的习惯选择使
4、用所以程序员可以根据自己的习惯选择使用 AWT 或者是或者是 Swing。n但是但是,最好不要二者最好不要二者 混用混用除开显示风格不同不说除开显示风格不同不说,还很还很可能造成层次可能造成层次(Z-Order)错乱错乱512.2图形用户界面工具包图形用户界面工具包SwingnJava图形用户界面的基本元素包括:图形用户界面的基本元素包括:n用户界面组件(组件类)用户界面组件(组件类)n事件处理模块(事件类)事件处理模块(事件类)n图形和图像工具(图形类、图像类)图形和图像工具(图形类、图像类)n布局管理器(布局类)布局管理器(布局类)n它们主要都在它们主要都在javax.swing包中,包中
5、,Swing是是Java包的一部分。包的一部分。6712.2.1 Swing组件分类组件分类n组件:构成图形用户界面的各种元素。组件:构成图形用户界面的各种元素。n构建图形用户界面的类可以分成三组:构建图形用户界面的类可以分成三组:n容器类容器类(container class)n辅助类辅助类(helper class)n组件类组件类(component class)。812.2.1 Swing组件分类组件分类容器类容器类n容器类组件中可以包含其他组件,也可以包含其他容器。容器类组件中可以包含其他组件,也可以包含其他容器。n容器又分为两种:容器又分为两种:顶层容器顶层容器和和非顶层容器非顶层容
6、器。n顶层容器是可以独立的窗口,顶层容器是可以独立的窗口,Swing的顶层容器有的顶层容器有JFrame、JApplet和和JDialog等等。n非顶层容器,不是独立的窗口,它们必须位于窗口之内,非顶层容器,不是独立的窗口,它们必须位于窗口之内,非顶层容器包括非顶层容器包括JPanel及及JScrollPanel等。等。912.2.1 Swing组件分类组件分类n辅助类和组件类都属于非容器类组件不能包含其他组件的辅助类和组件类都属于非容器类组件不能包含其他组件的组件,其种类较多。组件,其种类较多。n辅助类辅助类n辅助类是用来辅助类是用来描述组件属性描述组件属性的,辅助类通常包含在的,辅助类通常
7、包含在java.awt包中,包中,Swing组件不能取代组件不能取代AWT的全部类,的全部类,只能替代只能替代AWT的的GUI组件类,组件类,AWT辅助类保持不变。辅助类保持不变。n组件类组件类n所有所有Swing GUI组件类(除组件类(除JFrame、JApplet和和JDialog)都是)都是JComponent类的子类,例如,类的子类,例如,JButton、JTextField、JTextArea、JComboBox、JList、JRadioButton和和JMenu等。等。nSwing轻型组件分类参见教材轻型组件分类参见教材P202 表表12.11012.2.1 Swing组件分类组
8、件分类n一般独立应用程序主要是要框架一般独立应用程序主要是要框架JFrame作为容器,作为容器,在在JFrame上通过放置上通过放置JPanel面板来控制图形界面板来控制图形界面的布局;面的布局;n如果应用到浏览器中,则主要使用如果应用到浏览器中,则主要使用JApplet来做容来做容器。器。JApplet是一个能够嵌入到浏览器中运行的特是一个能够嵌入到浏览器中运行的特殊容器。殊容器。1112.2.1 Swing组件分类组件分类1.Swing容器的层次关系容器的层次关系一般的一般的Swing窗口,实际上包含几个窗口,实际上包含几个“层次层次”。1212.2.1 Swing组件分类组件分类1.Sw
9、ing容器的层次关系容器的层次关系一般的一般的Swing窗口,实际上包含几个窗口,实际上包含几个“层次层次”,各个层的关,各个层的关系如教材系如教材P202 图图12.2所示。所示。n顶层容器。顶层容器。是一个窗口容器对象,该对象包含了是一个窗口容器对象,该对象包含了Swing窗窗口的各个层次,在该对象里面可以加入其它窗口对象。口的各个层次,在该对象里面可以加入其它窗口对象。n根窗格。根窗格。是在创建顶层容器后自动创建的,供是在创建顶层容器后自动创建的,供Swing顶层顶层容器在后台使用,是顶层容器中做包含的最内层,通常无容器在后台使用,是顶层容器中做包含的最内层,通常无法在这一层上做任何操作
10、与处理。法在这一层上做任何操作与处理。n分层窗格。分层窗格。加入分层窗格中的组件可以设置其图层层次,加入分层窗格中的组件可以设置其图层层次,且不会被内容窗格中的对象屏蔽。是其它窗格的父级。且不会被内容窗格中的对象屏蔽。是其它窗格的父级。1312.2.1 Swing组件分类组件分类n菜单栏。菜单栏。菜单栏被添加到分层窗格的顶部。是可选的。菜单栏被添加到分层窗格的顶部。是可选的。n内容窗格。内容窗格。是分层窗格中的某一层,是一个是分层窗格中的某一层,是一个JPanel对象,对象,在窗体中起着工作区的作用。可以放置大部分的可见组件。在窗体中起着工作区的作用。可以放置大部分的可见组件。n玻璃窗格玻璃窗
11、格。主要用来产生绘图效果,以及用来触发窗口程。主要用来产生绘图效果,以及用来触发窗口程序的各种事件。玻璃窗格浮在最上面,默认情况下是隐藏序的各种事件。玻璃窗格浮在最上面,默认情况下是隐藏的。的。1412.2.1 Swing组件分类组件分类1512.2.1 Swing组件分类组件分类2.框架类框架类JFramen是是Java应用程序的顶层容器。应用程序的顶层容器。nJFrame是是java.awt.Frame的扩展版本,是一个的扩展版本,是一个window子类,在使用子类,在使用Swing类库实现用户图形接口,必须继承该类库实现用户图形接口,必须继承该类类。nJFrame容器包括窗口标题、窗口外
12、观、窗口边界、调整容器包括窗口标题、窗口外观、窗口边界、调整窗口大小的图标、关闭和最小化窗口的图标。并且可以直窗口大小的图标、关闭和最小化窗口的图标。并且可以直接在容器上添加组件,如按钮、文本等接在容器上添加组件,如按钮、文本等。1612.2.1 Swing组件分类组件分类构造方法:构造方法:npublic JFrame()throws HeadlessException。创建了一个新的容器窗口,默认该窗口是不可见的。创建了一个新的容器窗口,默认该窗口是不可见的。npublic JFrame(String title)throws HeadlessException 创建一个新的容器窗口,通过
13、方法的参数设置窗口标题,创建一个新的容器窗口,通过方法的参数设置窗口标题,该窗口默认是不可见的。该窗口默认是不可见的。1712.2.1 Swing组件分类组件分类该类的常用方法该类的常用方法(P203-204)ngetContentPane()该方法返回一个框架对象,使用该框架对象来添加组件,如该方法返回一个框架对象,使用该框架对象来添加组件,如增加按钮、菜单、工具栏、列表框等组件。增加按钮、菜单、工具栏、列表框等组件。nsetSize(int width,int hight)设置窗口尺寸、窗口大小以像素为单位计算。设置窗口尺寸、窗口大小以像素为单位计算。ngetJMenuBar()返回此窗体
14、上设置的菜单栏。返回此窗体上设置的菜单栏。nsetJMenuBar(JMenuBar menubar)设置此窗体的菜单栏。设置此窗体的菜单栏。nsetIconImage(Image image)设置要作为此窗口图标显示的图像。设置要作为此窗口图标显示的图像。18例例App12_1辅助类辅助类组件类组件类19例例App12_1为什么在该实例中被没有显示背景为什么在该实例中被没有显示背景色?色?JFrameJFrame默认采用了默认采用了FlowLayoutFlowLayout布局布局管理器,你的组件在该布局管理器管理器,你的组件在该布局管理器中被塞满整个中被塞满整个frameframe,挡住了背
15、景。,挡住了背景。就是说,实际上就是说,实际上JFrameJFrame还是有背景还是有背景的一般用的一般用JFrameJFrame的时候要初始化一的时候要初始化一个个JPanelJPanel,把组件放在,把组件放在JPanelJPanel里,里,然后把然后把JPanelJPanel放到放到JFrameJFrame里,这样里,这样可以较好的控制组建位置等其他的可以较好的控制组建位置等其他的东西。在这种方式下直接给东西。在这种方式下直接给JPanelJPanel设置设置setBackgroundsetBackground就可以一直看就可以一直看到背景了到背景了命令提示符环境命令提示符环境20例例A
16、pp12_1_121例例App12_1_1例例App12_1_22212.2.1 Swing组件分类组件分类3.面板类面板类JPaneln面板是一种没有标题栏、没有边框的中间层容器,在该容面板是一种没有标题栏、没有边框的中间层容器,在该容器上可以放置其他组件如单选按钮、列表框等。还可以包器上可以放置其他组件如单选按钮、列表框等。还可以包含其他容器,如一个新的含其他容器,如一个新的JPanel对象,从而方便地实现容对象,从而方便地实现容器的嵌套。器的嵌套。n在面板创建后是无法单独显示的。面板不是顶层容器,必在面板创建后是无法单独显示的。面板不是顶层容器,必须放到其他容器内,也可以放入另一个面板内
17、。必须放在须放到其他容器内,也可以放入另一个面板内。必须放在JFrame或或Applet这样的顶层窗口中才可以显示。这样的顶层窗口中才可以显示。n一个界面只可以有一个一个界面只可以有一个JFrame窗体组件,但可以有多个窗体组件,但可以有多个JPanel面板组件面板组件2312.2.1 Swing组件分类组件分类3.面板类面板类JPanel该类的构造函数:该类的构造函数:nJPanel():创建一个面板,并且该面板组件的布局管理器:创建一个面板,并且该面板组件的布局管理器为为FlowLayout()。nJPanel(LayoutManager layout):创建一个面板,且该:创建一个面板,
18、且该面板设置了指定的布局管理器。布局管理器管理在容器上面板设置了指定的布局管理器。布局管理器管理在容器上放置的组件,具体的内容会在放置的组件,具体的内容会在12.4节详细介绍。节详细介绍。2412.2.1 Swing组件分类组件分类3.面板类面板类JPanel常用方法:常用方法:nJPanel默认的布局管理器是默认的布局管理器是FlowLayout,可以使用,可以使用setLayout()方法改变其默认布局。方法改变其默认布局。n也可以采用包含它的容器不同的布局管理器。也可以采用包含它的容器不同的布局管理器。25例例App12_2在框架中加入面板在框架中加入面板26例例App12_2在框架中加
19、入面板在框架中加入面板27例例App12_2在框架中加入面板在框架中加入面板2812.2.1 Swing组件分类组件分类4.组件类组件类n又称控制组件(控件),它里面不能包含其他组件。又称控制组件(控件),它里面不能包含其他组件。n作用:完成与用户的交互,包括接收用户的命令、接收用作用:完成与用户的交互,包括接收用户的命令、接收用户输入的文本或用户的选择、向用户显示文本或图形。户输入的文本或用户的选择、向用户显示文本或图形。n常用控件:命令类、选择类、文字处理类等。常用控件:命令类、选择类、文字处理类等。2912.2.1 Swing组件分类组件分类5.图形界面设计的步骤图形界面设计的步骤1.创
20、建组件创建组件(Component):创建组成界面的各种元素,如:创建组成界面的各种元素,如按钮、文本框等。按钮、文本框等。2.指定布局指定布局(Layout):根据具体需要排列界面上各元素的:根据具体需要排列界面上各元素的位置关系。位置关系。3.响应事件响应事件(Event):定义图形用户界面的事件和各界面元:定义图形用户界面的事件和各界面元素对不同事件的响应,从而实现图形用户界面与用户的素对不同事件的响应,从而实现图形用户界面与用户的交互功能。交互功能。3012.2.2 颜色类、字体类、图像图标类颜色类、字体类、图像图标类1.颜色类颜色类Colorn属于属于java.awtn每种颜色均看作
21、是由红每种颜色均看作是由红(R)、绿、绿(G)、蓝、蓝(B)三色组成。三色组成。n构造方法:构造方法:Color(int r,int g,int b)n颜色常量值颜色常量值 Color.black,Color.blue,Color.gray,Color.red Color.white n例如例如 Color c=new Color(int rgb)参数取值参数取值0255,越大则表明这种,越大则表明这种颜色的成分越重。颜色的成分越重。3112.2.2 颜色类、字体类、图像图标类颜色类、字体类、图像图标类2.字体类字体类Fontn用来规范组件所用的字体样式、大小与字形等。用来规范组件所用的字体样
22、式、大小与字形等。n构造方法:构造方法:Font(String font_name,int style,int size)字体名称字体名称字形样式:字形样式:PLAIN、BOLD、ITALIC字号大小字号大小32Font类的成员方法类的成员方法 public string getName():获得字体的名称:获得字体的名称 public int getStyle():获得字体的样式获得字体的样式 public int getSize():获得字体的大小获得字体的大小 public boolean isPlain():若字体是正常型,则返回若字体是正常型,则返回true public boole
23、an isBold():若字体是粗体,则返回若字体是粗体,则返回true public boolean isItalic():若字体是斜体,则返回若字体是斜体,则返回true12.2.2 颜色类、字体类、图像图标类颜色类、字体类、图像图标类3312.2.2 颜色类、字体类、图像图标类颜色类、字体类、图像图标类3.图标图像类图标图像类ImageIconnJava语言使用语言使用javax.swing.ImageIcon类表示图标。类表示图标。表表12.12给出了给出了ImageIcon类的常用构造方法,表类的常用构造方法,表12.13给出了给出了ImageIcon类的常用方法。类的常用方法。34
24、Java中中Image类与类与ImageIcon类的区别类的区别 Image类一般尺寸过大,不适合作类一般尺寸过大,不适合作ImageIcon类。类。ImageIcon imageIcon=new ImageIcon(“duke.gif”);/Icon由图片文件形成由图片文件形成Image image=imageIcon.getImage();/但这个图片太大不适合做但这个图片太大不适合做Icon/为把它缩小点,先要取出这个为把它缩小点,先要取出这个Icon的的image,然后缩放到合适的大小然后缩放到合适的大小Image smallImage=image.getScaledInstance(
25、30,20,Image.SCALE_FAST);/再由修改后的再由修改后的Image来生成合适的来生成合适的IconImageIcon smallIcon=new ImageIcon(smallImage);/最后设置它为按钮的图片最后设置它为按钮的图片JButton iconButton=new JButton(smallIcon);35Java中中Image类与类与ImageIcon类的区别类的区别 而由而由ImageIcon类到类到Image类,可以通过:类,可以通过:ImageIcon imageIcon=new ImageIcon(“duke.gif”);/Icon由图片文件形成由图
26、片文件形成JFrame jf=null;jf.setImageIcon(ImageIcon.getImage();3612.3 创建组件创建组件n12.3.1 标签标签n12.3.2 命令按钮命令按钮、复选框、单选按钮、复选框、单选按钮n12.3.3 文本编辑组件文本编辑组件、滚动窗格、滚动窗格n12.3.4 选项窗格选项窗格3712.3.1 标签标签JLabeln标签用来在窗口中显示文字的控件标签用来在窗口中显示文字的控件n在整个应用程序中,不仅把在整个应用程序中,不仅把 JLabel 用作文本描述,还将用作文本描述,还将它用作图片描述。每当在它用作图片描述。每当在 Swing 应用程序中看
27、到图片的应用程序中看到图片的时候,它就有可能是时候,它就有可能是 JLabel。JLabel 对于对于 Swing 初学初学者来说没有许多意料之外的方法。者来说没有许多意料之外的方法。3812.3.1 标签标签JLabel基本的方法基本的方法nget/setText():获取获取/设置标签的文本。设置标签的文本。nget/seticon():获取获取/设置标签的图片。设置标签的图片。nget/setHorizontalAlignment():获取获取/设置文本的水平位置。设置文本的水平位置。nget/setVerticalAlignment():获取获取/设置文本的垂直位置。设置文本的垂直位置
28、。nget/setDisplayedMnemonic():获取获取/设置标签的访问键(下设置标签的访问键(下划线文字)。划线文字)。nget/setLableFor():获取获取/设置这个标签附着的组件,所以当设置这个标签附着的组件,所以当用户按下用户按下 Alt+访问键时,焦点转移到指定的组件。访问键时,焦点转移到指定的组件。39例例App12_340例例App12_341例例App12_342例例App12_4u在框架窗口中加入指定大小的标签,并设置当鼠标悬停在标签上时给在框架窗口中加入指定大小的标签,并设置当鼠标悬停在标签上时给出相应的提示信息。出相应的提示信息。uSwingSwing中
29、的几乎所有组件都是继承自中的几乎所有组件都是继承自JComponentJComponent,它提供了一个,它提供了一个setToolTipText(StringsetToolTipText(String strstr)方法,来创建工具提示方法,来创建工具提示。43例例App12_444例例App12_44512.3.2 命令按钮、复选框、单选按钮命令按钮、复选框、单选按钮1.命令按钮命令按钮Jbuttonn用户用鼠标单击它来控制程序运行的流程。用户用鼠标单击它来控制程序运行的流程。nJButton创建后通过容器的创建后通过容器的add()将其放入容器。将其放入容器。n构造方法及常用方法见教材构
30、造方法及常用方法见教材P212,213 表表12.16、12.1746例例App12_547例例App12_54812.3.2 命令按钮、复选框、单选按钮命令按钮、复选框、单选按钮2.复选框复选框JCheckBox、单选按钮、单选按钮JbuttonnJCheckBox可以单独使用,而单选按钮必须配合可以单独使用,而单选按钮必须配合javax.swing包中的包中的ButtonGroup类将其组成单选按钮组来类将其组成单选按钮组来使用使用。n如果有多个复选框,那么也需要如果有多个复选框,那么也需要ButtonGroup类将其组成类将其组成复选框复选框按钮组来使用按钮组来使用。n重要的重要的 Bu
31、ttonGroup 方法是:方法是:nadd():添加添加 JCheckBox 或或 JRadioButton 到到 ButtonGroup。ngetElements():获得获得 ButtonGroup 中的全部组件,允许对中的全部组件,允许对它们进行迭代,找到其中选中的那个。它们进行迭代,找到其中选中的那个。49例例App12_650例例App12_6注意:注意:ButtonGroupButtonGroup不是不是java.awt.Componentjava.awt.Component的子类,所的子类,所以不能添加到容器中以不能添加到容器中51例例App12_652例例App12_6531
32、2.3.3 文本文本编辑组件与滚动窗格编辑组件与滚动窗格1.文本行组件文本行组件JTextFieldn文本行组件文本行组件JTextField主要用于接收用户键盘输入的文本。主要用于接收用户键盘输入的文本。n设置文本的方法:设置文本的方法:n get/setText(),用于获取,用于获取/设置设置 JTextField 中的文本中的文本5412.3.3 文本文本编辑组件与滚动窗格编辑组件与滚动窗格2.密码文本行组件密码文本行组件JPasswordFieldnPasswordField主要用于输入密码主要用于输入密码ngetEchoChar():获取每次字符输入时在:获取每次字符输入时在 JP
33、asswordField 中显示的字符。中显示的字符。默认值为默认值为“*”。nsetEchoChar():设置每次字符输入时在:设置每次字符输入时在 JPasswordField 中中显示的字符。显示的字符。ngetPassword():这是从:这是从 JPasswordField 中获得口令的恰当中获得口令的恰当方法,因为它返回一个包含口令的方法,因为它返回一个包含口令的 char。为了保证恰当。为了保证恰当的安全性,数组应当被清为的安全性,数组应当被清为 0,以确保它不会保留在内存,以确保它不会保留在内存中。中。5512.3.3 文本文本编辑组件与滚动窗格编辑组件与滚动窗格3.文本区组件
34、文本区组件JTextArea nis/setLineWrap():设置在行过长的时候是否要自动换行。:设置在行过长的时候是否要自动换行。nis/setWrapStyleWord():设置在单词过长的时候是否要把:设置在单词过长的时候是否要把长单词移到下一行。长单词移到下一行。n文本区组件文本区组件JTextArea 通常与滚动窗格组件通常与滚动窗格组件JScrollPane一一起使用起使用。4.滚动窗格组件滚动窗格组件JScrollPane n用用 JTextArea 调用调用 JScrollPane 的构造函数,这为的构造函数,这为 JTextArea 创建了在文本过长时滚动的能力:创建了在
35、文本过长时滚动的能力:JScrollPane scroll=new JScrollPane(getTextArea();add(scroll);56例例App12_757例例App12_758例例App12_75912.3.4 选项窗格选项窗格JTabbedPanenJTabbedPane组件中允许组件中允许包含多个选项卡包含多个选项卡。n用户选取项目的一种组件,用户利用该组件来表用户选取项目的一种组件,用户利用该组件来表JTabbedPane类的构造方法及常用方法见教材中表类的构造方法及常用方法见教材中表12.25、12.26n例如:例如:JTabbedPane tab=new JTabbe
36、dPane();tab.add(“Java”,new JLabel(“Java”);nJTabbedPane类有多个类有多个addTab()方法,这里采用了其中一方法,这里采用了其中一种,第一个参数是页签的标题,第二个参数是页签上放置种,第一个参数是页签的标题,第二个参数是页签上放置的组件,如的组件,如JLabel,当然可以是任意的组件。,当然可以是任意的组件。60例例App12_861例例App12_862例例App12_86312.4 布局管理器布局管理器u布局管理即页面管理。页面管理(布局管理即页面管理。页面管理(layout):):指指窗口上的组件遵循一定的规则来排列,并会随着窗口上的
37、组件遵循一定的规则来排列,并会随着窗口大小的变化来改变组件大小与位置的一种布窗口大小的变化来改变组件大小与位置的一种布局方式。局方式。u自动布局:当为一个容器指定一个布局管理器后,自动布局:当为一个容器指定一个布局管理器后,将一个组件加入该容器中时,布局管理器就能自将一个组件加入该容器中时,布局管理器就能自动设置该组件的大小和位置。动设置该组件的大小和位置。6412.4 布局管理器布局管理器ujava.awt包中共定义了五种布局管理器,每个布包中共定义了五种布局管理器,每个布局管理器对应一种布局策略,分别是:局管理器对应一种布局策略,分别是:n流式布局管理器流式布局管理器FlowLayoutn
38、边界式布局管理器边界式布局管理器BorderLayoutn卡片式布局管理器卡片式布局管理器CardLayoutn网格式布局管理器网格式布局管理器GridLayoutn网网格包格包布局管理器布局管理器GridBagLayout。6512.4 布局管理器布局管理器ujava.Swing包包提供的提供的布局管理器布局管理器有有:n盒式盒式布局管理器布局管理器BoxLayoutn重叠重叠布局管理器布局管理器OverlayLayoutn弹簧弹簧布局管理器布局管理器SpringLayout6612.4.1 流式布局管理器流式布局管理器FlowLayoutn布局策略布局策略u组件按照加入容器的先后顺序从左向
39、右排列;组件按照加入容器的先后顺序从左向右排列;u一行排满后就自动地转到下一行继续从左向右排列;一行排满后就自动地转到下一行继续从左向右排列;u每一行中的组件都居中排列。每一行中的组件都居中排列。u默认居中对齐,可以通过默认居中对齐,可以通过FlowLayout(int align)方法)方法指定对齐方式指定对齐方式6712.4.1 流式布局管理器流式布局管理器FlowLayoutnFlowLayout布局管理器是布局管理器是Panel、Applet和和JPanel默认的布默认的布局管理方式。局管理方式。n布局管理器的容器中的组件大小不随容器大小的变化而改布局管理器的容器中的组件大小不随容器大
40、小的变化而改变变.n当容器中的组件不多时,使用这种布局策略非常方便。当容器中的组件不多时,使用这种布局策略非常方便。n是是JPanel默认的布局管理方式。默认的布局管理方式。n构造方法及常用方法见教材表构造方法及常用方法见教材表12.2712.29n见教材例见教材例12.968例例App12_969例例App12_97012.4.2 边界式布局管理器边界式布局管理器BorderLayoutn将显示区域按地理方位分为东将显示区域按地理方位分为东(East)、西、西(West)、南南(South)、北、北(North)、中、中(Center)五个区域五个区域。n将组件加入容器中,若没有指定区域,则
41、将组件加入容器中,若没有指定区域,则默认为中间默认为中间;若;若将组件加入到已被占用的位置,将会取将组件加入到已被占用的位置,将会取 代原先的组件。代原先的组件。7112.4.2 边界式布局管理器边界式布局管理器BorderLayoutn利用利用add()添加组件时必须指出组件的摆放位置。添加组件时必须指出组件的摆放位置。n是是JFrame、JApplet、JDialog默认的布局管理方式。默认的布局管理方式。n在在BorderLayout类的定义中这类的定义中这5个区域用个区域用5个常量值表示:个常量值表示:EAST、WEST、SOUTH、NORTH和和CENTER。假设容。假设容器为器为c
42、p组件为组件为jb。则将组件添加到容器上的方式为:。则将组件添加到容器上的方式为:BorderLayout bl=new BorderLayout();Cp.add(jb,BorderLayout.CENTER);n不是五个部分都必须添加不是五个部分都必须添加n中间组件会自动调节大小中间组件会自动调节大小72例例App12_1073例例App12_97412.4.3 网格式布局管理器网格式布局管理器GridLayoutu提供的页面布局规则是将容器的空间划分成提供的页面布局规则是将容器的空间划分成若干行与列的网格若干行与列的网格形式,在容器上添加组件时,它们会按从左到右、从上到下的形式,在容器上
43、添加组件时,它们会按从左到右、从上到下的顺序在网格中顺序在网格中均匀均匀排列。排列。u网格的行数和列数可以在创建网格的行数和列数可以在创建GridLayout对象的构造方法里指对象的构造方法里指定。若控件数正好是行定。若控件数正好是行列,则按行、列数放置;若控件数超列,则按行、列数放置;若控件数超过了行过了行列,则列,则先满足行先满足行。u利用利用GridLayout布局策略时,容器布局策略时,容器中各组件的宽度相同,所有组件的中各组件的宽度相同,所有组件的高度也相同,当容器尺寸发生变化时,高度也相同,当容器尺寸发生变化时,各组件的相对位置不变各组件的相对位置不变。u构造方法及常用方法见构造方
44、法及常用方法见u教材表教材表12.33、12.3475例例App12_1176例例App12_1177例例App12_1178例例App12_1179例例App12_118012.4.4 卡片式布局管理器卡片式布局管理器CardLayout页面布局方式是把页面布局方式是把“窗口容器窗口容器”中的所有组件如同堆叠起来中的所有组件如同堆叠起来的一付的一付“扑克牌扑克牌”,每次只能显示最上面的一张一样,这个,每次只能显示最上面的一张一样,这个被显示的组件将占据所有的容器空间。被显示的组件将占据所有的容器空间。使用使用add()往窗口容器中加入组件时应为每个组件赋予一个往窗口容器中加入组件时应为每个组
45、件赋予一个名字。依据这个名字利用名字。依据这个名字利用CardLayout类所提供的方法来控类所提供的方法来控制其他组件是否显示。制其他组件是否显示。该布局方式该布局方式每次仅有一个组件是可见的每次仅有一个组件是可见的。利用卡片布局管理器时,通常要用到多个容器,其中一个利用卡片布局管理器时,通常要用到多个容器,其中一个容器使用卡片布局管理器,而另外的容器使用其它布局管容器使用卡片布局管理器,而另外的容器使用其它布局管理器。理器。81例例App12_1282例例App12_1283例例App12_128412.4.5 网格包布局管理器网格包布局管理器GridBagLayoutn将容器中的组件按行
46、、列的位置摆放,但将容器中的组件按行、列的位置摆放,但各组件所占据的空各组件所占据的空间可以是互不相同的间可以是互不相同的。n可以为每个组件指定其占据的网格数,可以保留组件原来的可以为每个组件指定其占据的网格数,可以保留组件原来的大小,可以按任意顺序随意加入容器的任意位置,从而可以大小,可以按任意顺序随意加入容器的任意位置,从而可以真正自由地安排容器中的组件的大小和位置。真正自由地安排容器中的组件的大小和位置。n每个组件都要与一个网格包约束条件的实例对象来配合使用,每个组件都要与一个网格包约束条件的实例对象来配合使用,该实例对象指定组件如何放置在它的显示区域内。该实例对象指定组件如何放置在它的
47、显示区域内。85例例App12_1386例例App12_1387例例App12_1388例例App12_138912.4.6 盒式布局管理器盒式布局管理器BoxLayoutBoxLayout是一种是一种Swing布局管理器,这种布局策略是在一布局管理器,这种布局策略是在一行或一列中摆放组件行或一列中摆放组件。假设容器为假设容器为jp,设置该容器的盒子布局管理器的方式为:,设置该容器的盒子布局管理器的方式为:jp.setLayout(new BoxLayout(jp,BoxLayout.Y_AXIS);BoxLayout的构造函数要求把欲接受管理器控制的容器对的构造函数要求把欲接受管理器控制的容
48、器对象作为第一个参数,而第二个参数说明了组件的布局方向象作为第一个参数,而第二个参数说明了组件的布局方向90例例App12_149112.4.7重叠布局管理器重叠布局管理器OverlayLayout和和弹簧布局管理器弹簧布局管理器SpringLayout简介简介u重叠布局管理器重叠布局管理器OverlayLayout和弹簧布局管理器和弹簧布局管理器SpringLayout均是均是Swing中定义的布局管理器。中定义的布局管理器。u具有具有OverlayLayout布局策略的容器,将加入该容器的所布局策略的容器,将加入该容器的所有组件叠放在一起,第一个被家人容器的组件会放在容器有组件叠放在一起,第一个被家人容器的组件会放在容器的最前面。的最前面。uSpringLayout的主要思想是在组件的周围放置一个灵活的主要思想是在组件的周围放置一个灵活的弹簧,这种弹簧可以压缩或伸长,把组件堆放到要求的的弹簧,这种弹簧可以压缩或伸长,把组件堆放到要求的位置。位置。92