5-2 布局管理器
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
BorderLayout布局管理器
• BorderLayout是顶层容器中内容窗格的缺
省布局管理器 • 由BorderLayout管理的容器被划分成北 (North)南(South)西(West)东(East) 中(Center)五个区域,分别代表容器的上、 下、左、右和中部,用常量 BorderLayout.NORTH、 BorderLayout.SOUTH、BorderLayout.WEST、 BorderLayout.EAST、 BorderLayout.CENTER表示
程序7-8
• 为JFrame实例的内容窗格指定了一个
CardLayout类型的布局管理器,然后向其 中加入了五张卡片,每张卡片都是JPanel 类的一个实例,并且具有不同的背景色。 每当在程序窗口按动鼠标,下一张卡片就 会显示出来。程序7-8
4)GridLayout布局策略
GridLayout布局管理器
add()方法加入到容器中的指定区域
frame = new JFrame(“Frame Title”); button = new JButton(“Press Me”); frame.getContentPane().add(b, BorderLayout.SOUTH);
组件加入
如果在add()方法中没有指定将组件放到哪个区域,那么它
•
程序7-6
程序7-6
当窗口大小改变时,窗口中按钮的相对 位置并不会发生变化,但按钮的大小会 改变。
3)CardLayout布局策略
CardLayout布局管理器
• 是一种卡片式的布局管理器,它将容器中
的组件处理为一系列卡片,每一时刻只显 示出其中的一张 ,当容器第一次显示时,第 一个添加到 CardLayout 对象的组件为可见 组件。 • 在javax.swing包中定义了JTabbedPane 类,它的使用效果与CardLayout类似但更 为简单
组件加入
• 如果希望在某个区域显示多个组件,可以首先在
该区域放置一个内部容器——JPanel组件,然后 将所需的多个组件放到JPanel中,通过内部容器 的嵌套构造复杂的布局 四个边界区域,如果没有使用,大小将变为零, Center区域将会扩展并占据这个未用区域的位置。 如果均没有使用, Center区域将会占据整个窗 口
CardLayout的构造函数
1.CardLayout(),创建一个间隙大小为 0 的新 卡片布局。 2. CardLayout(int hgap, int vgap) 创建一个具有指定的水平和垂直间隙 的新卡片布局。
CardLayout常见函数
1. first(Container parent)
FlowLayoHale Waihona Puke Baidut布局管理器
• FlowLayout定义在java.awt包中,该布
局管理器对容器中组件进行布局的方式是 将组件逐个地安放在容器中的一行上,一 行放满后就另起一个新行。在缺省情况下, 将组件居中放置在容器的某一行上 • FlowLayout布局管理器并不强行设定组件 的大小,而是允许组件拥有它们自己所希 望的尺寸
程序 public void7-4 go()
{ frame = new JFrame ("GUI example"); //创建一个JFrame实例 Container contentPane = frame.getContentPane(); //获取内容窗格 //为内容窗格设置FlowLayout布局管理器 frame.pack() new JFrame(“GUI example”) contentPane.setLayout(new FlowLayout()); frame.getContentPane() 这条语句通知框架 frame 设定一个适当 frame.setVisible(true) 这条语句的功能是创建 JFrame类的一个 这条语句获取 JFrame实例 的大小,以便能够以“紧缩”的形式包 实例。JFrame 是一个顶层级窗口,它带 这条语句的功能是使得框架 frame以及它所 b1 = new JButton("Press me"); //创建JButton实例 缺省的内容窗格,此后可以 容各个组件。为了做到这一点, frame 有标题框(标题由构造方法中的 String 包含的组件对用户可见,在此之前,框架和 b2 = new JButton("Don't press Me"); 修改它的布局管理器,并添 需要通知布局管理器,由布局管理器安 型参数“GUI example” 指定)并且可以 组件虽然已经创建好了,但是并没有显示出 加组件。 排每个组件的大小和位置。 来,只有调用了 setVisible(true) 方法后, FlowLayout()) 改变大小。需要注意的是,在刚刚创建 contentPane.setLayout(new contentPane.add(b1); //添加按钮 它们才变为可见。 时,JFrame的大小为0,并且不可见。 这条语句创建了一个FlowLayout型的布 contentPane.add(b2); new JButton(“Press Me”) 局管理器,并通过调用 setLayout()方法 这条语句的功能是创建 frame.pack(); 将该布局管理器指定给前面已经获得的 javax.swing.JButton 类的一个实例,该 JFrame 实例的缺省内容窗格。 frame.setVisible(true); 实例是窗口中的标准按钮(button), } 按钮上的标签由构造方法中String型参数 } “Press Me”指定。
布局管理
容器组件的布局设计
1.布局: 它决定容器内的各个组件的摆放状态(组件大 小及相对位置等),主要由布局管理器来控制 2.优点: 有次序地摆放组件、当窗口变化时会自动更新 版面并调整窗口的大小。 3.要点: GUI它在布局管理上采用了容器和布局管理分 离的方案。也就是说,容器只管将其他组件放入其 中,而不管这些组件是如何放置的。对于布局的管 理交给专门的布局管理器类(LayoutManager)来 完成。
main()方法 在这个例子中,main()方法有两个 作用。首先,它创建了一个ExGui 类的实例,在这个实例创建之前, 并没有实际可用的b1和b2数据项。 其次,当ExGui实例创建好以后, main()又调用了该实例的go()方 法,在这个方法中,程序的实际功 能得以实现。
public static void main(String args[]){ ExGui that = new ExGui(); that.go(); }
布局
• 组件的布局,包括位置和大小,通常由布局管理
• • •
器(Layout Manager)负责安排 每个容器都有一个缺省的布局管理器 通过容器的setLayout()方法改变容器的布局管理器 多种布局管理器
– java.awt.FlowLayout、java.awt.BorderLayout、 java.awt.GridLayout、java.awt.GridBagLayout、 java.awt.CardLayout、javax.swing.BoxLayout和 javax.swing.SpringLayout
2. 3. 4.
翻转到容器的第一张卡片 last(Container parent) 翻转到容器的最后一张卡片 next(Container parent) 翻转到指定容器的下一张卡片 show(Container parent, String name) 翻转到已添加到此布局(使用 addLayoutComponent)的具有指定 name 的组 件
– 每个组件都有一个getPreferredSize()方法, 布局管理器会调用这一方法取得每个组件希望 的大小
FlowLayout构造方法
• public FlowLayout() • public FlowLayout(int align) • public FlowLayout(int align, int hgap, int vgap)
– align对齐方式的可选项, align的可取值有 FlowLayout.LEFT、FlowLayout.RIGHT和 FlowLayout.CENTER三种形式 – hgap和vgap,可以设定组件的水平间距和垂直 间距
程序7-5
• 程序7-5
2)BorderLayout布局策略
BorderLayout:将容器内的空间划分为东、 南、西、北、中五个方位,并指明组件所在 的方位,它是JWindow、JDialog、JFrame的 缺省布局方式;
BorderLayout构造方法
• BorderLayout()
– 构造一个各部分间间距为0的BorderLayout实 例
• BorderLayout(int, int)
– 构造一个各部分间具有指定间距的BorderLayout 实例
在BorderLayout布局管理器的管理下,组件必须通过
Flowlayout:从上到下,从左到右依次摆放,每 行均居中,它是Panel、Applet的缺省布局;
程序7-4
import java.awt.*; import javax.swing.*; public class ExGui { private JFrame frame; private JButton b1; private JButton b2;
GridLayout(行列网格状布局);形似一个无框线
的表格,每个单元格中放一个组件
NULL布局:用setLayout(null)可以不使用布局,此
时可以对组件进行绝对定位。 Public void setBounds(int x,int y,int w,int h)
1)FlowLayout布局策略
Java中布局种类: Flowlayout(从上到下,从左到右依次摆放,每行均
居中,它是Panel、Applet的缺省布局);
BorderLayout(将容器内的空间划分为东、南、西、 CardLayout(卡片叠式布局):将组件象卡片一样
放置在容器中,在某一时刻只有一个组件可见
北、中五个方位,并指明组件所在的方位,它是Window、 Dialog、Frame的缺省布局方式);
将会缺省地被放置在Center区域
frame.getContentPane().add(button); 按钮将被放在框架的中部
在容器的每个区域,只能加入一个组件,如果向某个区域
中加入多个组件,那么只有最后一个组件是有效的
frame. getContentPane().add(new JButton(“buttonA”), BorderLayout.SOUTH); frame. getContentPane().add(new JButton(“buttonB”), BorderLayout.SOUTH); frame. getContentPane().add(new JButton(“buttonC”), BorderLayout.SOUTH); 最后只有buttonC显示在South区域。
• GridLayout是一种网格式的布局管理器,它将容 •
• •
器空间划分成若干行乘若干列的网格,组件依次 放入其中,每个组件占据一格 网格每列的宽(高)度都是相同的,这个宽度大致 等于容器的宽度除以网格的列(行)数 组件被放入容器的次序决定了它所占据的位置。 每行网格从左至右依次填充,一行用完之后转入 下一行 当容器的大小改变时,GridLayout所管理的组件 的相对位置不会发生变化,但组件的大小会随之 改变
GridLayout构造方法
• public GridLayout()
– 创建一个只有一行的网格,网格的列数根据实际需要 而定
• public GridLayout(int rows, int cols)
– rows和cols两个参数分别指定网格的行数和列数 rows 和cols中的一个值可以为0,但是不能两个都是0。如 果为0,那么网格行(列)数将根据实际需要而定