Swing常见布局管理器总结_第1页
Swing常见布局管理器总结_第2页
Swing常见布局管理器总结_第3页
Swing常见布局管理器总结_第4页
Swing常见布局管理器总结_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、 BorderLayout 边界布局管理器北区:页首(PAGE_START) north南区:页尾(PAGE_END) south西区:行首(LINE_START) west东区:行尾(LINE_END) east我们也可以在内容窗格的顶头放置工具栏,底部放置状态栏工具栏和状态栏的高度都是不变的,但长度随框架大小而改变这正好是边界型布局的北区、南区的特点因此,北区和南区可以放置工具栏和状态栏,同时会根据框架的大小自动调整面板、工具栏和状态栏的大小对于此类界面,可以将主工作区放在中间区里,辅助工具区放在周边的东、南、西、北四个区域的某一个区域中:缺省情况下,边界型布局的各区之间没有空隙,组件

2、彼此靠在一起可以指定区域间的水平间隙和垂直间隙:JPanel panel = new JPanel();panel.setLayout(new BorderLayout(5, 5);2、 BoxLayout(盒子布局器)它没有空构造函数,必须给出两个参数:需要它管理的容器对象组件排列的轴线方向,轴线方向有两种:LINE_AXIS(或者X_AXIS)表示组件按横线排成一行;PAGE_AXIS(或者Y_AXIS)表示组件按纵向排成一列组件的对齐方式(Alignment):对于纵向排列的组件,有3种对齐方式:btn1.setAlignmentX(Component.LEFT_ALIGNMENT);b

3、tn1.setAlignmentX(Component.CENTER_ALIGNMENT);btn1.setAlignmentX(Component.RIGHT_ALIGNMENT);对齐方式是组件本身的性质,而不是布局管理器的性质。因此,你需要调用每个组件本身的setAlignmentX函数来设定对齐方式这个界面的问题在于:“确定”和“取消”按钮之间离得太近为解决此问题,我们在这两个按钮之间插入一块固定宽度的刚性区域空白组件,以分隔两个组件:panel.add(new JButton("确定");panel.add(Box.createRigidArea(new Dime

4、nsion(15,0);panel.add(new JButton("取消"); 在二个按钮中间插入一个空白宽为15的空白区域界面的另一个问题是“确定”和“取消”按钮一般习惯靠右放置,而不是靠左放置为此,我们在“确定”按钮前放一块水平胶状区域,它的作用是尽量扩展自身,顶住两边的组件,如下面的示意图所示:panel.add(Box.createHorizontalGlue();panel.add(new JButton("确定");panel.add(Box.createRigidArea(new Dimension(15,0);panel.add(new

5、 JButton("取消");添加水平胶状区域以后,它就会把“确定”按钮向右顶,从而将按钮靠右放置,效果如下图所示:自定义区域的作用类似于胶状区域但它的最小、最大尺寸有一定的限制,不能象胶状区域那样无限制缩小或扩张3、 卡片布局管理器卡片式布局(CardLayout)卡片式布局的面板中有两个大小相同的子面板card1和card2:cards = new JPanel(new CardLayout();cards.add(card1, BUTTONPANEL);cards.add(card2, TEXTPANEL);其中“BUTTONPANEL”和“TEXTPANEL”是两个

6、字符串常量,用来表示两个子面板: final static String BUTTONPANEL = "显示按钮"final static String TEXTPANEL = "显示文本框"子面板1中放置的是按钮:JPanel card1 = new JPanel();card1.add(new JButton("新建");card1.add(new JButton("打开");card1.add(new JButton("保存");card1.add(new JButton(“新建”);子面

7、板2中放置的是文本框:JPanel card2 = new JPanel();card2.add(new JTextField("文本框", 20);当你想要显示某一个面板时,只要调用卡片式布局管理器的show函数,并在参数中给出卡片所对应的字符串即可下面的代码会显示面板card2,因为和card2关联的字符串TEXTPANEL的内容是“显示文本框”,与show函数的第二个参数相符合:CardLayout cl = (CardLayout)(cards.getLayout();cl.show(cards, TEXTPANEL);/ 最后注册事件完成该操作jcb.addIte

8、mListener(new ItemListener()public void itemStateChanged(ItemEvent e) String text = (String)e.getItem(); CardLayout layout = (CardLayout) cardPane.getLayout(); layout.show(cardPane, text););卡片式布局与标签页面板的异同点:都可以在一个有限区域内显示同样大小的多页内容由于标签页面板有自己的图形界面,因此使用起来比卡片式布局简单一些但标签页面板的灵活性不如卡片式布局高可以根据自己的实际需要来选择标签页面板或卡片

9、式布局4、 流式布局管理器流式布局(FlowLayout)流式布局的构造函数有3种形式:public FlowLayout()public FlowLayout(int alignment)public FlowLayout(int alignment, int horizontalGap, int verticalGap)第一种构造函数是按缺省形式布局第二种构造函数可以指定排列对齐方式:左对齐(FlowLayout.LEADING)居中对齐(FlowLayout.CENTER)靠右对齐(FlowLayout. TRAILING第三种的构造形式如下panel.setLayout(new Flo

10、wLayout(FlowLayout.LEADING, 15, 15);在此例中,将组件间的横向和纵向间隙都扩大到了15个象素5、 表格型布局表格型布局(GridLayout)在构造函数中,行、列数至少指定一个 ,另一个未指定 可以指定 0 行或者 0列。 但一般不鼓励同时指定行、列数因为一旦添加的组件太多或太少,Java会调整表格的行列数以符合组件数量,这样可能导致产生的界面与设想的界面完全不同如果只指定行数或列数,出现问题的可能性就小得多了在构造函数中还可以设定组件的横向、纵向间隙(缺省的间隙是0)。函数形式如下: public GridLayout(int rows, int colum

11、ns, int horizontalGap, int verticalGap)下面的例子将组件间的间隙设为5:panel.setLayout(new GridLayout(0, 2, 5, 5);6、 表格包型布局(GridBagLayout)a) 表格包型布局的灵活性主要体现在它可以对每个单元格、每个组件进行配置b) 它需要表格包约束(GridBagConstraints)类的辅助。这个约束类的作用只有一个,就是配置每个单元格里的组件c) 下面的代码用于在表格包中加入组件:panel.setLayout(new GridBagLayout();GridBagConstraints c = n

12、ew GridBagConstraints();panel.add(component, c);代码的第一行设置布局管理器为表格包型第二行代码产生一个约束对象随后对约束对象进行配置最后调用add函数添加组件,add函数的第二个参数为约束对象c,组件的配置信息就存储在约束对象c里c.fill = GridBagConstraints.HORIZONTAL;其它值有HORIZONTAL(宽度),表示将组件拉宽到与单元格宽度一致,但高度不变 VERTICAL(高度),表示将组件高度提升到与单元格高度一致,但宽度不变BOTH(同时),表示将组件的高度和宽度都拉伸到与单元格一致“gridx”,“grid

13、y”:组件所在的单元格位置例如:gridx = 0, gridy = 0,表示组件位于左上角的单元格gridx = 1, gridy = 2表示组件位于第2列、第3行的单元格建议对每个组件都指定它所在的单元格“weightx”,“weighty”:确定当用户拉大主程序界面时,各单元格如何分配多余的空间 这通过单元格的权重(weight)来确定当用户拉大了窗口的宽度时,权重为0的单元格的宽度不变,其它权重大于0的单元格按比例分配多出来的宽度weighty用于设置单元格高度的权重权重的绝对值不重要,关键是其相对比例3个按钮所在单元格的权重都是0.5时:第3个按钮所在单元格的权重为0时:“gridw

14、idth”,“gridheight”:分别表示这个组件在宽度和高度上分别占用了几个单元格 变量的值表示单元格个数,而不是象素数本例中,由于第四个按钮很长,一个单元格放不下,因此设gridwidth = 3也就是横向占据3个单元格的位置,但纵向仍然只占据了一个单元格的位置“ipadx”,“ipady”:设定组件内部的填充宽度或高度由于填充是针对两边的,因此组件的高度至少应为它的最小高度加上ipady*2本例中,为了提高第4个按钮的高度,同时将字体居中,设置它的内部填充高度为40“insets”:定义组件的外部填充,也就是说,在组件和单元格之间的空隙是多少。外部填充值是通过一个Insets对象来指定的,它的构造函数的4个参数分别是组件顶部、左侧、底部、右侧的填充值c.insets = new Insets(10,0,0,0);本例中,指定第5个按钮的顶部与单元格之间有10个象素的空隙“anchor”:设定当组件小于单元格时,应该怎样放置单元格。组件有9种放置方式: FIRST_LINE_START(左上角), PAGE_START(上部的中间), FIRST_LINE_END(右上角), LINE_START(左侧的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论