布局管理器---课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
构造方法主要下面几种: FlowLayout(FlowLayout.RIGHT,20,40); /*第一个参数表示组件的对齐方式,指组件在这 一行中的位置是居中对齐、居右对齐还是居左对齐, 第二个参数是组件之间的横向间隔,第三个参数是组 件之间的纵向间隔,单位是象素。*/ FlowLayout(FlowLayout.LEFT); //居左对齐,横向间隔和纵向间隔都是缺省值5个 象素 FlowLayout(); //缺省的对齐方式居中对齐,横向间隔和纵向间隔 都是缺省值5个象素
Swing中布局管理器的种类: FlowLayout流式布局 BorderLayout边界式布局 GridLayout网格式布局 CardLayout卡片式布局 GridBagLayout约束布局管理器 (网袋布 局管理器)
1. FlowLayout
FlowLayout 是JFrame,JPanel,Applet的缺省布局 管理器。其组件的放置规律是从上到下、从左到右进 行放置,如果容器足够宽,第一个组件先添加到容器 中第一行的最左边,后续的组件依次添加到上一个组 件的右边,如果当前行已放置不下该组件,则放置到 下一行的最左边。
8.3 java中常用的布局管理器
布局管理器
java为了实现跨平台的特性并且获得动态 的布局效果,java将容器内的所有组件安排给 一个"布局管理器"负责管理,如:排列顺序, 组件的大小、位置,当窗口移动或调整大小后 组件如何变化等功能授权给对应的容器布局管 理器来管理,不同的布局管理器使用不同算法 和策略,容器可以通过选择不同的布局管理器 来决定布局。
Insets——指组件与表格空间四周边缘的 空白区域的大小
增加一个标签:
tagLbl = new JLabel("Tags"); c.gridx = 1; //x grid position c.gridy = 1; //y grid position gridbag.setConstraints(tagLbl, c); //设 置标签的限制 contentPane.add(tagLbl); //增加到内容 面板
空布局(null)
jTextField1.setBounds(new Rectangle(80, 239, 250, 39)); jPanel1.setLayout(null); jPanel1.add(jTextField1, null); 参看null_test.java
上述布局的缺陷:
构造函数: new CardLayout() 设置方法: contentPane.setLayout(cardLayout1); 添加卡片方法: contentPane.add(”firstPanel”, panel1);
CardLayout类对象常用的方法有: 1.first(Container parent)显示第一张卡片 2.last(Container parent)显示最后一张卡 片 3.next(Container parent)显示下一张卡 片 4.previous(Container parent)显示前一张 卡片
课堂回顾
一.如何定义窗口 二.如何得到内容窗格 三.如何定义面板
(1)在框架中加入面板
Container c1=getContentPane(); c1.add(new MyJPanel());
(2)面板的定义:
Public class MyJPanel extends JPanel { public MyJPanel() {在此处添加按钮,设置背景色等} public void paintComponent(Graphics g){在此处画图} 属性的定义;}
流式布局应用于框架: JFrame1.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER)); JFrame1.getContentPane().add(new JButton());
流式布局应用于面板:
Panel1.setLayout(new FlowLayout());
4.CardLayout
CardLayout布局管理器能够帮助用户处理 两个以至更多的成员共享同一显示空间,它把 容器分成许多层,每层的显示空间占据整个容 器的大小,但是每层只允许放置一个组件,当 然每层都可以利用JPanel来实现复杂的用户界 面。牌布局管理器(CardLayout)就象一副叠 得整整齐齐的扑克牌一样,有多张牌,但是你 只能看见最上面的一张牌,每一张牌就相当于 牌布局管理器中的每一层。
在这种布局下,窗口的大小改变,则按 钮的位置随着改变,而其大小不改变 。
2. BorderLayout
BorderLayout 是Window,Frame和Dialog 的缺省布局管理器。BorderLayout布局管理器 把容器分成5个区域:North,South,East, West和Center,每个区域只能放置一个组件。 各个区域的位置及大小如下图所示:
很多人用嵌套的Border和GridLayout来进 行布局, 但是得到的结果要么变得太死板、 太嵌套了以至于都无法工作了,要么就 是窗口在变化的时候布局太不合理了
GridBagLayout布局:
可以实现任何想要的布局设计 应该在编码之前进行妥善规划
GridBagConstraints c = new GridBagConstraints (); C是网袋约束对象. 它可以控制一个按钮放在哪个格里面,放 在偏上还是偏下\偏左还是偏右的位置上.
参看例:InputPanel.java
上机任务:
1.作一个计算器的界面 2.作一个用于学生信息输入的窗口界面 3.作一个口令窗口,并对用户名和密码进 行判断.如果是正确用户,显示一提示.并 显示上题中的学生窗口。 StudFrame sf1=new StudFrame(); sf1.show();
Container contentPane = getContentPane (); GridBagLayout gridbag = new GridBagLayout(); contentPane.setLayout(gridbag);
Baidu Nhomakorabea
GridBagConstraints可以从11个方面来进行控 制和操纵,也可以给你提供一些帮助。这些内 容是: Gridx——组件的横向坐标(第几列) Girdy——组件的纵向坐标 (第几行) Gridwidth——组件的横向宽度,也就是指组件 占用的列数 Gridheight——组件的纵向长度,也就是指组 件占用的行数
参看BorderLayoutTest.java
3. GridLayout
使容器中各个组件呈网格状布局,平均占据容器的空
间。适用于JFrame的内容窗格和JPanel 如:panel1.setLayout(new GridLayout(6,6));
网格式布局也可以和其他布局嵌套使用. 参看ButtonGrid.java
5.show(Container parent,String name) 显示指定名称的卡片 这里的名称是使用add命令时给panel指 定的名称 参看例Card_test.java
容器的嵌套 在复杂的图形用户界面设计中,为了使布 局更加易于管理,具有简洁的整体风格,一个 包含了多个组件的容器本身也可以作为一个组 件加到另一个容器中去,容器中再添加容器, 这样就形成了容器的嵌套。比如:面板可以采 用GridLayout布局,再添加到采用 BorderLayout布局的内容窗格中,无论窗口大 小如何变化,其显示位置关系不变。 参看前例ButtonGrid.java
添加构件时可以用以下方法: f.add(new JButton("Center"), BorderLayout.CENTER); (即add(Component,int) 参看第8章:Border_1.java
在使用BorderLayout的时候,如果容器的大小 发生变化,其变化规律为:组件的相对位置不 变,大小发生变化。例如容器变高了,则 North、South区域不变,West、Center、East 区域变高;如果容器变宽了,West、East区域 不变,North、Center、South区域变宽。不一 定所有的区域都有组件,如果四周的区域 (West、East、North、South区域)没有组件, 则由Center区域去补充,但是如果Center区域 没有组件,则保持空白,其效果如下几幅图所 示:
weightx,weighty —— 用来设置窗口变大时,各 组件跟着变大的比例。 当数字越大,表示组件能得到更多的空间,默认值皆 为0。 Anchor——告诉布局管理器组件在表格空间中的位置. 当组件空间大于组件本身时,要将组件置于何处。 有CENTER(默认值)、NORTH、NORTHEAST、EAST、 SOUTHEAST、WEST、NORTHWEST选择。 Fill——如果显示区域比组件的区域大的时候,可以用 来控制组件的行为。控制组件是垂直填充,还是水平 填充,或者两个方向一起填充