Java 布局管理器
Java布局管理器与WPF布局管理器
![Java布局管理器与WPF布局管理器](https://img.taocdn.com/s3/m/f56f0abecd22bcd126fff705cc17552707225ee7.png)
Java 布局管理器与WPF 布局管理器Java 布局管理器与WPF 布局管理器现在很多开发工具都采用MVC 的开发模式,WPF 是比较具有代表性的,AWT 也具有一定的MVC 特征,相对来说肯定WPF 更具有灵活性,现在来类比两者中的布局管理器1:JAVA-BorderLayout 与WPF-DockPanel特点:可以将组建停靠在四边,WPF 中没有Center ,想有Java 的CENTER 效果,要设置LastChildFill 为True1 2 3 4 5 6 7 8 9 //Java BorderLayoutprivate JPanel borderPanel=new JPanel(new BorderLayout()); borderPanel.add(new JButton("North"),BorderLayout.NORTH); borderPanel.add(new JButton("South"),BorderLayout.SOUTH); borderPanel.add(new JButton("Center"),BorderLayout.CENTER); borderPanel.add(new JButton("West"),BorderLayout.WEST); borderPanel.add(new JButton("East"),BorderLayout.EAST);1 2 3 4 5 6 7 8 9 <!--WPF XAML DockPanel--><DockPanel Margin="5" LastChildFill="True"><Button DockPanel.Dock="Top">Top</Button><Button DockPanel.Dock="Bottom">Button</But ton><Button DockPanel.Dock="Left">Left</Button><Button DockPanel.Dock="Right">Right</Butto n><Button></Button></DockPanel>设置边距:Java-setHgap,setVgap--WPF-Margin绝对位置:Java-东南西北--WPF-左右上下2:Java-GridLayout 与WPF-UniformGrid特点:先确定行列,然后将组建按添加顺序依次排放1 2 3 4 5 6 7 //Java GridLayoutprivate JPanel gridPanel=new JPanel(new GridLayout(2,2));gridPanel.add(new JButton("0"));gridPanel.add(new JButton("1"));gridPanel.add(new JButton("2"));1 2 3 4 5 6 7 8 9 <!--WPF XAML UniformGrid--><UniformGrid Rows="2" Columns="3"><Button FontSize="24">One</Button> <Button FontSize="24">Two</Button> <Button FontSize="24">Three</Button> <Button FontSize="24">Four</Button> <Button FontSize="24">Six</Button> </UniformGrid>3:Java:FlowLayout 与WPF:WarpLayout特点:按顺序排列下去,如果剩余长度不足,则自动换行1 2 3 4 5 6 7 8 9 //Java FlowLayoutprivate JPanel flowPanel=new JPanel(new FlowLayout()); flowPanel.add(new JButton("One")); flowPanel.add(new JButton("Two")); flowPanel.add(new JButton("Three")); flowPanel.add(new JButton("Four")); flowPanel.add(new JButton("Five"));flowPanel.add(new JButton("Six"));1 2 3 4 5 6 7 8 9 <!--WPF XAML WrapPanel--> <WrapPanel> <Button Width="50" Height="20">One</Button > <Button Width="100" Height="20">Two</Butto n> <Button Width="100" Height="20">Three</But ton> <Button Width="100" Height="20">Four</Button><Button Width="100" Height="20">Five</Butt on></WrapPanel>4:最重要Java:GridBagLayout 与WPF:Grid特点:面板以单元格布局,组建可以定位到置顶单元格12345 6 7 8 9 10 11 12 13 14 15 16 171819private JPanel gridBagPanel=new JPanel(new GridBagLayout()); GridBagConstraints c=new GridBagConstraints(); c.fill=GridBagConstraints.BOTH; c.weightx=1.0; c.weighty=1.0; c.gridwidth=GridBagConstraints.REMAINDER; gridBagPanel.add(new JButton("One"),c); c.gridx=1; c.gridy=1; gridBagPanel.add(new JButton("TWO"),c); c.gridx=1; c.gridy=2; gridBagPanel.add(new JButton("Three"),c); c.gridx=0; c.gridy=1; c.gridheight=2; c.gridwidth=1; gridBagPanel.add(new JButton("Four"),c); 1 2 3 4 5 6 7 <Grid><Grid.RowDefinitions><RowDefinition></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition></ColumnDefinition>8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0<ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions><Button Grid.Column="0" Grid.Row="1" Margin="5" KeyDown="Key_Down" Name="tp" Grid.ColumnSpan="3"></Button><Button Grid.Column="2" Grid.Row="0" Margin="5" Name="tb "><GroupBox Header="asdf" Margin="0" HorizontalAlig nment="Stretch" VerticalAlignment="Stretch"><StackPanel><RadioButton>aaa</RadioButton><RadioButton>aaa</RadioButton><RadioButton>aaa</RadioButton></StackPanel></GroupBox></Button><ToggleButton Grid.Column="0" Grid.Row="0" ToolTipService .BetweenShowDelay="100"></ToggleButton><GridSplitter Grid.Column="1" Grid.Row="0" Grid.RowSpan=" 2" VerticalAlignment="Stretch" Width="3"></GridSplitter></Grid>总体上感觉,AWT的布局管理和WPF的布局管理原理上相似,当不如WPF那么灵活。
java布局管理器总结
![java布局管理器总结](https://img.taocdn.com/s3/m/f902733787c24028915fc390.png)
java布局管理器总结BorderLayoutFlowLayoutGridLayoutGridBagLayoutCardLayoutBoxLayout1.BorderLayoutng.Object--java.awt.BorderLayout将版面划分成东、西、南、北、中五个区域,将添加的组件按指定位置放置。
BorderLayout.EASTBorderLayout.WESTBorderLayout.SOUTHBorderLayout.NORTHBorderLayout.CENTER构造函数:BorderLayout()建立组件间无间距的BorderLayoutBorderLayout(int hgap,int vgap)建立组件间水平间距为hgap,垂直间距为vgap的BorderLayout例一:[java] view plaincopyprint?import java.awt.BorderLayout;import javax.swing.JFrame;import javax.swing.JButton;public class BorderLayoutDemo {public static void main(String[] args) {//建立一个JFrame,JFrame的默认LayoutManager为BorderLayoutJFrame f=new JFrame("BorderLayout");JButton btn=new JButton("BorderLayout.NORTH");f.add(btn,BorderLayout.NORTH);btn=new JButton("BorderLayout.SOUTH");f.add(btn,BorderLayout.SOUTH);btn=new JButton("BorderLayout.EAST");f.add(btn,BorderLayout.EAST);btn=new JButton("BorderLayout.West");f.add(btn,BorderLayout.WEST);btn=new JButton("BorderLayout.CENTER");f.add(btn,BorderLayout.CENTER);f.pack();f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}运行结果:在上例代码的第13,14行之间插入以下代码[java] view plaincopyprint?f.setLayout(new BorderLayout(10,10));运行结果:2.FlowLayoutng.Object--java.awt.FlowLayout组件按从左到右而后从上到下的顺序依次排列,一行不能放完则折到下一行。
Java语言程序设计课件——布局管理器
![Java语言程序设计课件——布局管理器](https://img.taocdn.com/s3/m/8a4ac4b216fc700aba68fc24.png)
add(new JButton(labels[i]));
resize(240布局例2
public class Fig7_6 extends Applet { /** * Initializes the applet. You never need to call this directly; it is * called automatically by the system once the applet is created. */ public void init() { String labels[] = {"One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; setLayout(new GridLayout(3, 3, 10, 10)); /*部件之间加了间隙 */ for (int i=0; i<labels.length; i++) add(new JButton(labels[i])); resize(240, 180); }
// Add calendar components // Top
top.add(new JButton("Previous Month"), BorderLayout.WEST); JLabel month = new JLabel("October", JLabel.CENTER); top.add(month, BorderLayout.CENTER); top.add(new JButton("Next Month"), BorderLayout.EAST); add(top, BorderLayout.NORTH); // Middle // Add days names String days[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; for (int i=0; i<days.length; i++)
Java布局管理学习--流动式布局管理器
![Java布局管理学习--流动式布局管理器](https://img.taocdn.com/s3/m/b9ddfe65a98271fe910ef9e0.png)
Java图形化界面设计——布局管理器之FlowLayout(流式布局)引用网址:/liujun13579/article/details/7771191Java虽然可以以像素为单位对组件进行精确的定位,但是其在不同的系统中将会有一定的显示差异,使得显示效果不尽相同,为此java提供了布局管理器,以使编写的图形界面具有良好的平台无关性。
注意:所有的布局管理器均是针对容器来使用的,包括顶层容器和中间容器。
一、布局管理器所属类包所属类包布局管理器名称说明Java.awt FlowLayout(流式布局)组件按照加入的先后顺序按照设置的对齐方式从左向右排列,一行排满到下一行开始继续排列BorderLayout(边界布局)容器划分为东、西、南、北、中五个区域,每个区域只能放置一个组件。
GridLayout(网格布局)容器的空间划分成M×N列的网格区域,每个区域只能放置一个组件。
CardLayout(卡片布如同一叠牌,每个牌对应一个组件,但局)每次只能显示其中的一张牌。
适用于在一个空间中防止多个组件的情况GridBagLayout(网格包布局)GridLayout的升级版,组件仍然是按照行、列放置,但是每个组件可以占据多个网格Java.swing BoxLayout(箱式布局)允许在容器中纵向或者横向防止多个控件SprigLayout(弹簧布局)根据一组约束条件放置控件无空布局不使用布局管理器,按照控件自身提供的大小、位置信息放置控件二、容器的默认布局管理器各容器都有默认的布局管理,见下表:容器默认布局方式顶层容器JFrame BorderLayout(边界布局) JDialog BorderLayout(边界布局) JApplet FlowLayout(流式布局)中间容器JPanel FlowLayout(流式布局)三、FlowLayout(流式布局)使用FlowLayout布局方式的容器中组件按照加入的先后顺序按照设置的对齐方式(居中、左对齐、右对齐)从左向右排列,一行排满(即组件超过容器宽度后)到下一行开始继续排列。
JAVA实验指导:布局管理器
![JAVA实验指导:布局管理器](https://img.taocdn.com/s3/m/22e6757f1711cc7931b716f3.png)
练习1:Frame的使用1、实验要求:创建并显示一个标题为“My Frame”,背景色为白色,大小为300×300的框架2、程序运行效果3、程序模板略练习2:面板的使用1、实验要求:创建并显示一个标题为“包含面板的Frame”,背景色为绿色,大小为800×800的框架。
该框架的中间位置放置一个颜色为黑色、大小为200×200的面板。
在该面板中放置一个按钮,按钮显示“请点击我”2、程序运行效果3、程序模板//按模板要求,将程序补充完整//text2.javapublic static void main(String[] args) {[代码1]//创建并显示一个标题为“包含面板的Frame”的Frame框[代码2] //背景色为绿色[代码3] //大小为800×800f.setLayout(null);JPanel pan=new JPanel();//该框架的中间位置创建放置一个面板[代码4]// 颜色为黑色[代码5] //大小为200×200[代码6] //将该面板添加到框架中[代码7]//在该面板中放置一个按钮,按钮显示“请点击我”[代码8] //将该按钮添加到面板中f.setVisible(true);}练习3:布局管理器的使用1、实验要求:创建并显示一个标题为“My Frame”,背景色为白色,大小为1000×1000的框架。
在该框架中放置八个按钮,按钮的标题分别为“按钮1”、……“按钮8”。
采用FlowLayout布局管理器。
2、程序运行效果3、程序模板//text3.java//参考书P122-123练习4:布局管理器的使用1、实验要求:编写一个java程序,在程序中生成一个框架窗口,设置窗口的布局管理器为网格式布局管理器,往窗口中加入9个按钮。
2、程序运行效果3、程序模板//text4.java//参考书P124练习5:按钮、标签、文本行、文本区实验要求:书P127。
谈谈Java中的布局管理器
![谈谈Java中的布局管理器](https://img.taocdn.com/s3/m/b7bf6e741fb91a37f111f18583d049649a660e44.png)
55第2卷 第16期产业科技创新 2020,2(16):55~56Industrial Technology Innovation 谈谈Java 中的布局管理器潘国荣(常州刘国钧高等职业技术学校,江苏 常州 213025)摘要:布局管理器是Java 语言中编制图形用户界面程序的基础。
本文对布局管理器的概念、种类及常见用法进行了介绍。
关键词:Java ;图形用户界面;布局管理器中图分类号:TP311 文献标识码:A 文章编号:2096-6164(2020)16-0055-02在图形用户界面的程序设计中,首先要设计并编制好界面,然后才能写事件处理代码。
现在大多数支持GUI 编程的程序设计语言,如C#、.Net 都支持直接拖拉控件来编制界面,但是Java 语言暂不支持直接拖拉操作,它是通过独有的布局管理器用代码来实现界面编制的。
本文将就Java 语言中的布局管理器及使用方式作一论述。
1 布局管理器在Java 中,为了实现跨平台的特性并且获得动态的布局效果,Java 将容器内的所有组件安排给一个”布局管理器”负责管理,组件在容器中的布局,包括组件的位置和大小,通常由布局管理器负责安排。
常用的顶级容器有窗体JFrame、对话框JDialog,中间容器有面板JPanel,它们均有缺省布局管理器。
窗体JFrame 和对话框JDialog 的缺省布局管理器均为边界布局BorderLayout,面板JPanel 的缺省布局管理器为流式FlowLayout,面板JPanel 无法单独显示,必须添加到某个容器中。
2 常见布局管理器介绍2.1 流布局管理器FlowLayout对组件逐行定位,行内从左到右,一行排满后换行;默认对齐方式为居中对齐;不改变组件的大小,按组件原有尺寸显示组件,可在构造方法中设置不同的组件间距、行距及对齐方式。
见图1。
图1 流布局管理器2.2 边界布局管理器BorderLayout将整个容器布局划分成东、西、南、北、中五个区域,组件只能被添加到指定的区域;如不指定组件的加入部位,则默认加入到中心区域,是JFrame 的默认布局管理器。
JavaGUI布局管理器
![JavaGUI布局管理器](https://img.taocdn.com/s3/m/3216d49270fe910ef12d2af90242a8956becaade.png)
JavaGUI布局管理器容器可设置布局管理器,管理容器中组件的布局:container.setLayout(new XxxLayout());Java有6种布局管理器,AWT提供了5种:FlowLayoutBorderLayoutGridLayoutGridBagLayoutCradLayoutSwing还提供了⼀种:BoxLayout1、FlowLayout 流式布局顾名思义,组件像⽔流⼀样,从第⼀⾏开始,从左向右依次排列,碰到边界时转到下⼀⾏继续。
三个构造函数:FlowLayout() //使⽤默认参数FlowLayout(int align) //设置对齐⽅式FlowLayout(int align,int hgap,int vgap) //设置对齐⽅式、⽔平间距、垂直间距align是FlowLayout类的常量,⽐如:FlowLayout.LEFT,FlowLayout.CENTER2、BorderLayout 边界布局将容器划分为EAST、WEST、SOUTH、NORTH、CENTER五个部分,每个部分可放置⼀个组件。
2个构造函数:BorderLayout() //使⽤默认参数BorderLayout(int hgap,int vgap) //设置⽔平间距、垂直间距放置组件时需指定位置:container.add(Component comp, Borderlayout.SOUTH); //第⼆个参数是BorderLayout类的常量,指定组件位置container.add(Component comp); //缺省位置时,默认为BorderLayout.CENTER,放在中间⼀共5个位置,⼀个位置最多放1个组件。
当然,可以在⼀个位置放置多个组件,只是后放置的组件会覆盖之前放置的组件。
也可以⼀个都不放。
3、GridLayout ⽹格布局将容器划分为指定⾏数、列数的⽹格,每个格⼦的尺⼨都相同,⼀个格⼦中放置⼀个组件,适合组件⼤⼩差不多的,⽐如放置计算器的按钮。
java常用布局管理器
![java常用布局管理器](https://img.taocdn.com/s3/m/efef289ee53a580217fcfe17.png)
Java GUI布局管理概述 FlowLayout顺序排放组件 BorderLayout边界版面布局 GridLayout网格版面布局 用面板JPanel进行界面的分块布局
Java GUI布局管理概述
布局管理意义 在Java中,组件在界面上的布局由布局管理器来管理。如: Container cc=getContentPane(); cc.setLayout(new FlowLayout()); cc.add(···); 由此可见,容器的操作处理上将界面设计分成两个步骤: 通过 setLayout 方法将布局的管理交给专门的布局管理器类来完成。 通过 add 方法将将其他组件加入其中 每个容器都有一个缺省的布局管理器,用来实现布局管理。 Container的缺省管理器是 BorderLayout。 大多数的布局管理器在AWT包中,有一小部分在S小,组件的排列方式不变,组件之间的行列间距保持不变 所有组件的宽度和高度相同,其大小会随窗口的尺寸而相应改变
用面板JPanel进行界面的分块布局
JPanel概述 JPanel继承了Jcomponent,它是 一个 Swing 组件,而JComponent继承 了AWT包中的 Container,所以JPanel 是一个容器组件,在JPanel中可容放 其他组件。 JFrame、其上的内容窗格和 JPanel 的关系如图:
FlowLayout布局特点:
改变窗口的大小,那么组件的排列方式也会跟着变化 组件的顺序和组件的尺寸是确定的,不随窗口而改变
BorderLayout边界版面布局
BorderLayout类概述
这是Container对象默认的布局方式且全部居中。
构造方法
public BorderLayout() public BorderLayout(int hgap,int vgap) 说明:此时需在add方法中加上确定边界位置的参数,不加参数组件会叠 加在一起。 如:add(new JButton(“North”) , BorderLayout.NORTH);
Java布局管理器
![Java布局管理器](https://img.taocdn.com/s3/m/75f5858bcc22bcd126ff0c26.png)
Java图形用户界面2—布局管理器在Java中组件的摆放位置和大小是由布局管理器来决定的,容器对布局管理器的特定实例保持着一个引用,当容器要定位一个组件的时候,它将调用布局管理器来决定。
我们在设置组件的大小的时候,也是通过这个完成的。
在Java中给我提供了五种布局管理器。
BoraderLayout边界布局管理器,FlowLayout浮动布局管理器,GridLayout网格布局管理器,CardLayout卡片布局管理器,GridBagLayout布局管理器。
在Java中FlowLayout是Panel容器的默认管理器,其组件的放置规律是从上到下,从左到又。
BoarderLayout是Window、Frame和Dialog的默认布局管理器。
下面我们先说一下BoarderLayout布局管理器。
下面有张图片:通过上面的图片我们可以看出来,BoarderLayout将容器分成了五个区域:North、South、East、West和Center。
每一个区域可以用来放置一个组件。
如果只有一个组件,默认的是放置在Center中。
下面我们看一个例子程序:在上面的程序中,我们可以看到在我们创建Frame后必须设置一些参数,这些参数在程序中注释已经显示其作用了,但是Frame的设置并不只有这些,读者可以自己根据Java帮助文档详细的学习。
在上面程序执行完成之后就是按照第一张图片给的位置摆放这些按钮的,但是这些按钮之间没有空隙,有时候我们想让按钮之间有空隙,我们可以将14行的代码注释取消,表示的产生2个像素的空隙。
FlowLayot布局管理器,是所有的组件浮动的填充在容器中,我们看一个例子:上面程序的运行结果如下图:如果我们改变窗口的大小,相应的组件的位置也会发生改变,读者可以自己试一下。
对于FlowLayout还提供了按钮的对齐方式,例如我们程序中的第15行代码,就是设置了左对齐的方式,如果我们取消注释,这些按钮将会从左边依次摆放。
Java布局管理器深入讨论
![Java布局管理器深入讨论](https://img.taocdn.com/s3/m/9454f91d10a6f524ccbf85c1.png)
java 已 经 为 我 们 提 供 了 几 个 常 用 的 布 局 管 理 器 类 , 例 如 : BorderLayout 、 FlowLayout、GridBagLayout等等。但在实际的布局上,我们还是会有其他的需要。我 在 不 久 前 的 一 个 问 题 中 曾 经 要 一 个 垂 直 的 流 式 布 局 , 我 称 之 为 VflowLayout , 其 实 BoxLayout和GridBagLayout可以完成类似的工作,但前者是swing类的成员,我的客户 端是一个applet,不能使用,而后者必须在类生成的时候指定列数,而失去了灵活性, 所以我决定重写一个自己的布局管理器来实现。经过分析,所有的LayoutManager都要 实现一个接口,就是LayoutManager Inerface或者是他的一个子接口LayoutManager2 Interface,后者用于复杂的布局管理,例如GridCardLayout。LayoutManager有五个方 法需要实现,分别是:
java布局管理器
![java布局管理器](https://img.taocdn.com/s3/m/97ce0aef4afe04a1b071de83.png)
Container中的component,通常是由布局管理器(layout manager)来管理的。
每个Container(如:Panel和Frame)均有一个缺省的布局管理器,用户也可通过setLayout()方法指定其他的布局管理器。
布局管理器负责决定Container内所有组件的位置和大小。
Java中包含了下列布局管理器:Flow Layout - 是Panel和Applet缺省的布局管理器Border Layout - 是Window和Dialog缺省的布局管理器,即也是Frame缺省的布局管理器。
Grid LayoutCard LayoutGridBag LayoutFlow Layout Manager(顺序布局管理器)该布局管理器对应的类为java.awt.FlowLayout。
以下是一个使用Flow Layout的例子。
import java.awt.*;public class ExGui {private Frame f;private Button b1;private Button b2;public static void main(String args[]) {ExGui guiWindow = new ExGui();guiWindow.go();}public void go() {//create a instance of the class java.awt.Framef = new Frame("GUI example");//create a instance of flow layout manager//and install it in the Framef.setLayout(new FlowLayout());// create a instance of class java.awt.Buttonb1= new Button("Press Me");//the button label is defined by the String argument//to the constructorb2 = new Button("Don't Press Me");//add component b1 to Container ff.add(b1);f.add(b2);//强制告诉Frame对象,对它的component再排版,//以尽量小的空间存放这些componentf.pack();f.setVisible(true);}}程序运行效果该例所使用的flow layout是按行来放置component的,每当一行放满后,就新产生一行开始放。
Java中的布局管理器
![Java中的布局管理器](https://img.taocdn.com/s3/m/b44ed1335a8102d276a22f2d.png)
前言随着Internet的飞速发展,Java技术也得到了越来越广泛的应用。
而无论我们是采用J2SE、J2EE还是J2ME,GUI都是不能回避的问题。
现在的应用软件越来越要求界面友好、功能强大而又使用简单。
而众所周知,在Java中进行GUI设计相对于其跨平台、多线程等特性的实现要复杂和麻烦许多。
这也是很多Java程序员抱怨的事情。
但GUI 已经成为程序发展的方向,所以我们也必须了解Java的GUI设计方法和特点。
其实,采用Java提供的布局管理器接口和相应的布局管理类,我们也可以做出相当漂亮的界面来,当然实现起来肯定要比VB麻烦许多。
本文试图通过自己的开发经历介绍一些具体的应用实例,希望能给那些曾经象我一样苦闷的Java痴迷者一些帮助。
2 Java中的布局管理器2.1 为什么要使用布局在实际编程中,我们每设计一个窗体,都要往其中添加若干组件。
为了管理好这些组件的布局,我们就需要使用布局管理器。
比如说,设计一个简单的计算器,或一个文本编辑器等等。
这些组件是让JVM 自己任意安排呢?还是按照一定的位置关系进行规范的安排呢?当然应该选择后者。
将加入到容器的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。
在Java中,布局由布局管理器(LayoutManager) 来管理。
那么,我们在什么时候应该使用布局管理器?应选择哪种布局管理器?又该怎样使用布局管理器呢?如果你写的是GUI程序,在使用AWT/Swing组件时就不应硬性设置组件的大小和位置,而应该使用Java的布局管理器(LayoutManager)来设置和管理可视组件的大小和位置,否则就有可能造成布局混乱。
不信,你可以新建一个Frame(或JFrame),通过setBounds()方法往其中添加几个Button(或JButton),一旦你将窗体拉大或缩小时,你会发现组件的排列完全不是按你所预想的那样。
为了解决这个问题,即当窗体(或容器)缩放时,组件位置也随之合理调整,我们就需要使用布局管理器。
Java的布局管理器
![Java的布局管理器](https://img.taocdn.com/s3/m/bb615bb1c77da26925c5b0b1.png)
北京开放大学Beijing Open UniversityJava的布局管理器主讲教师:申雪萍职称:副教授任职单位:北京航空航天大学软件学院ObjectFontColorGraphics布局管理器MenuComponentComponentEventCheckBoxGroup布局管理器Java里有六种布局管理器–FlowLayout(顺序布局)–BorderLayout(边界布局)–GridLayout(网格布局)–BoxLayout–CardLayout(卡片布局)–GridBagLayout(网格包布局)–null布局FlowLayout布局•每个部件从左到右、从上到下,依据容器的大小逐行在容器中顺序摆放•FlowLayout是Applet类和Panel类、JPanel类的默认布局方式FlowLayout布局•FlowLayout中的主要方法–构造函数FlowLayout();FlowLayout(int align);FlowLayout(int align, int hgap, int vgap);–设置布局setLayout(new FlowLayout());•FlowLayout 中的主要方法 –构造函数FlowLayout(); FlowLayout(int align);FlowLayout(int align, int hgap, int vgap);–设置布局setLayout(new FlowLayout());FlowLayout 布局对齐方式FlowLayout.RIGHT FlowLayout.LEFT FlowLayout.CENTER表示组件之间间隔示例:FlowLayoutDemo.javaBorderLayout布局•BorderLayout布局方式是将组件按东、南、西、北、中五种方位放置在容器中•如果东南西北某个位置上没有放置组件,则该区域会被中间区域和相关的某个位置区域自动充满•BorderLayout是Frame、JFrame和Dialog、JApplet的默认布局方式•构造函数1.BorderLayout();2.BorderLayout(int hgap, int vgap);•设置布局setLayout(new BorderLayout());•添加组件到指定布局addLayoutComponent(Component comp,Object constraints);BorderLayout 布局BorederLayout.EAST BorederLayout.SOUTH BorederLayout.WEST BorederLayout.NORTH BorederLayout.CENTER示例:BorderLayoutDemo.java•GridLayout 布局 •GridLayout 的构造函数 •设置布局GridLayout 布局GridLayout(int rows, int cols);GridLayout(int rows, int cols, int hgap, int vgap); setLayout(new GridLayout(3,3,5,5));将每个组件放置在rows 行及columns 列中,即将容器分成大小相等的矩形域,当一排满了,就从下一行开始示例:GridLayoutDemo.javaCardLayout布局•CardLayout布局管理是把容器的所有组件当成一叠卡片,卡片布局方式中只有其中的一个组件,即一张卡片被显示出来,其余组件是不可见的•构造函数–CardLayout(int hgap, int vgap);–CardLayout();CardLayout布局•常用方法–addLayoutComponent(Component comp,Object constraints);–first(Container parent);–last(Container parent);–next(Container parent);–show(Container parent, String name);示例:CardDeck.javanull布局•null布局又称为空布局•对一个容器(Container)而言,可以用下面方式设置其布局管理器为nullpublic void setLayout(null);•这样,容器内的组件(Component)可以利用下面的方法来设置其大小和位置public void setBounds(int x, int y,int width,int height);x,y表示组件左上角在容器中的坐标,width和height表示组件的宽和高容器的嵌套•容器的嵌套:在实际的编程中,我们经常遇到向容器中添加容器,这就是容器的嵌套•JPanel类型的容器常常扮演这种角色,在多种布局方式之间起到了一种桥梁的作用面板容器•JPanel 组件是一个中间容器•用于将小型的轻量级组件组合在一起•JPanel 的缺省布局为 FlowLayout框架 下拉式菜单面板面板用户界面 组件(UI) 面板 用户界面 组件(UI)面板 用户界面 组件(UI)面板面板 UI 面板 UI 面板 UI默认布局管理器ComponentContainer WindowFrame Dialog Panel Applet BorderLayout FlowLayoutJava 的布局管理器 北京开放大学 Beijing Open University北京开放大学Beijing Open University。
java布局管理
![java布局管理](https://img.taocdn.com/s3/m/de722920ee06eff9aef807ce.png)
19
3.fill和anchor参数。fill参数用于指定组件在单元 格内进行伸缩时的填充方式,该参数可以有四种 有效值:GridBagConstraints.NONE(不伸缩)、 GridBagConstraints.HORIZONTAL(水平伸缩)、 GridBagConstraints.VERTICAL(垂直伸缩)和 GridBagConstraints.BOTH 如果组件没有填充整个区域,可以通过设置 anchor域指定其位置。有效值为 GridBagConstraints.CENTER, GridBagConstraints.NORTH, GridBagConstraints.NORTHEAST, GridBagConstraints.EAST等
6
三、BorderLayout (边框布局管理器)
313页
边框布局管理器是每个JFrame的内容窗格的默认布局管理器 流布局管理器完全控制每个组件的放置位置,边框布局管理器则不然 组件可被置于内容窗格的中部,北部、南部、东部或西部位置。 如果扩大窗口,用户将会看到中心区域会尽可能的扩大,而其他区域只 扩大到容纳组件所需空间的大小。
27
作业:
1 使用GridLayout 将两个单选按钮排在一列。 2 设计一个密码登录界面,输入的密码 要用星号“*” 表示。如下图:
18
2 . 增 量 域 ( weightx 和 weighty ) 。 GridBagLayout内的每个区域都必须设置它的 增量 域 ,即 weightx 和 weighty 。如果将权值设置为 0 , 那么这个区域就不会在那个方向上扩张或收缩,超 出它的初始大小。 从概念上讲,增量参数属于行和列的属性,而不 属于摸个单独的单元格。但却需要在单元格上指定 它们,这是因为网格组布局并不暴露行和列。 注意,增量并不实际给出列的相对大小
JAVA布局管理器
![JAVA布局管理器](https://img.taocdn.com/s3/m/2e59fb99580216fc710afd79.png)
布局管理器
构造复杂的布局效果
无布局管理 容器的嵌套 复杂的布局管理器
Part Four
第四讲 布局管理器
布局管理器
组件在容器中的布局
Java程序布局的特点
窗口大小的不确定性(显示无关) 控件的大Hale Waihona Puke 和位置可以随窗体大小的 调整而调整
布局管理器
布局管理器
布局管理器
Java为了实现跨平台的特性并获得动态的布局 效果,将容器内的所有组件安排给一个“布局管理 器”的对象负责管理。
布局管理器
无布局管理
在程序中还可以使用setLayout(null)方法设置 某个容器的布局管理器为空,也就是无布局管理器。
用户必须使用Java语言提供的setLocation() , setSize(),setBounds()等方法,为容器中的每个组件 设置大小和显示位置,否则将无法看到这些组件。
当窗口移动或调整大小后组件如何变化等功能, 授权给对应的容器布局管理器来管理。
不同的布局管理器使用不同算法和策略,容器 可以通过选择不同的布局管理器来决定布局。
布局管理器
简单的布局管理器 FlowLayout BorderLayout GridLayout CardLayout
布局管理器
FlowLayout FlowLayout布局管理器是Panel和Applet的缺 省布局管理器。 这种布局方式是将组件一排一排地依次放置。 当容器被重新设置大小后,则布局也将随之发 生改变。各个组件大小不变,而其相对位置会发生 变化。
布局管理器
GridLayout GridLayout 布局管理器可以使容器中的各个 组件呈网格状布局。当改变容器大小后,其中的组 件相对位置不变,但大小改变。 容器中各个组件同高度、同宽度。各个组件按 照从左到右、从上到下的顺序依次排列。
Java的布局管理器GridBagLayout的使用方法【图文说明】
![Java的布局管理器GridBagLayout的使用方法【图文说明】](https://img.taocdn.com/s3/m/b160db60b94ae45c3b3567ec102de2bd9605ded7.png)
Java的布局管理器GridBagLayout的使⽤⽅法【图⽂说明】GridBagLayout是java⾥⾯最重要的布局管理器之⼀,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的,GridBagLayout类是⼀个灵活的布局管理器,它不要求组件的⼤⼩相同便可以将组件垂直、⽔平或沿它们的基线对齐。
每个GridBagLayout对象维持⼀个动态的矩形单元⽹格,每个组件占⽤⼀个或多个这样的单元,该单元被称为显⽰区域。
下⾯就通过⼀个记事本案例去说明GridBagLayout的使⽤⽅法。
分析:带有箭头的说明可以拉伸的。
4占⽤4个格⼦,6占⽤4个格⼦。
如果设置6可以拉伸了,那么4也会跟着拉伸。
但是如果设置4拉伸,那么7所在的列也可以拉伸,所以4不能设置拉伸。
我们应该设置4是跟随6进⾏拉伸。
灰⾊的线是为了看清布局的⼤概,组件占⽤的格⼦数。
运⾏时的显⽰效果import java.awt.*;import javax.swing.*;public class GridBagDemo extends JFrame {public static void main(String args[]) {GridBagDemo demo = new GridBagDemo();}public GridBagDemo() {init();this.setSize(600,600);this.setVisible(true);}public void init() {j1 = new JButton("打开");j2 = new JButton("保存");j3 = new JButton("另存为");j4 = new JPanel();String[] str = { "java笔记", "C#笔记", "HTML5笔记" };j5 = new JComboBox(str);j6 = new JTextField();j7 = new JButton("清空");j8 = new JList(str);j9 = new JTextArea(); j9.setBackground(Color.PINK);//为了看出效果,设置了颜⾊GridBagLayout layout = new GridBagLayout();this.setLayout(layout);this.add(j1);//把组件添加进jframethis.add(j2);this.add(j3);this.add(j4);this.add(j5);this.add(j6);this.add(j7);this.add(j8);this.add(j9);GridBagConstraints s= new GridBagConstraints();//定义⼀个GridBagConstraints,//是⽤来控制添加进的组件的显⽰位置s.fill = GridBagConstraints.BOTH;//该⽅法是为了设置如果组件所在的区域⽐组件本⾝要⼤时的显⽰情况//NONE:不调整组件⼤⼩。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•
编写图形界面应用程序
布局管理器
5. GridBagLayout 见例题: 见例题:GridBagWindow.java
如果没有设fill 参数: 如果没有组件设weightx参数:
编写图形界面应用程序
布局管理器
综合例子: 综合例子:
编写图形界面应用程序
布局管理器
综合例子: 综合例子:
编写图形界面应用程序
• •
编写图形界面应用程序
布局管理器
2. FlowLayout 当调整窗口大小时: 当调整窗口大小时:
编写图形界面应用程序
9.3 布局管理器
2. FlowLayout 见例题: 见例题:FlowWindow.java
编写图形界面应用程序
布局管理器 3.
•
GridLayout
基本布局策略是把容器的空间划分成若干行乘若干列的网格区域, 组件就位于这些划分出来的小区域中。 所有的区域大小一样。 组件按从左到右,从上到下的方法加入。 用构造函数划分出网格的行数和列数, new GridLayout(行数,列数)。
编写图形界面应用程序
布局管理器
1. BorderLayout
• • 是顶层容器( JFrame, JDialog, 和 JApplet ) 的默认布局管理器。 有五个位置组件:
编写图形界面应用程序
布局管理器
1. BorderLayout 见例题: 见例题:BorderWindow.java
编写图形界面应用程序
container.add(firstComponent); container.add(Box.createHorizontalGlue()); container.add(secondComponent);
编写图形界面应用程序
布局管理器
4. BoxLayout • 组件对齐 一般来说: 一般来说:
布局管理器
1. BorderLayout 当调整窗口大小时: 当调整窗口大小时:
编写图形界面应用程序
布局管理器
2.
• •
FlowLayout
panel 类的默认布局管理器。 组件按照加入的先后循序从左向右排列,一行 排满后 之后就下转到下一行继续从左至右排列 每一行中的组件都居中排列 使用components的preferred sizes
• • •
编写图形界面应用程序
布局管理器
GridLayout 3. 当调整窗口大小时: 当调管理器
3. GridLayout
见例题:GridWindow.java
编写图形界面应用程序
布局管理器
4.
• •
BoxLayout
组件按从左到右或从上到下的方法加入 考虑 components的对齐and minimum, preferred, and maximum sizes 见例题:BoxWindow.java
编写图形界面应用程序
布局管理器
1. 2. 3. 4. 5. FlowLayout BorderLayout BoxLayout GridLayout GridBagLayout
编写图形界面应用程序
布局管理器
使用布局管理器的一般原则: 使用布局管理器的一般原则: 当创建 JPanel 或 添加 components 到一 个 content pane 时,需要考虑使用布局 管理器。 其他的中间容器不需要考虑布局管理器。
编写图形界面应用程序
布局管理器
4. BoxLayout • X alignments 和maximum size
– – – X alignment of 0.0 (Component.LEFT_ALIGNMENT Component.LEFT_ALIGNMENT) Component.LEFT_ALIGNMENT X alignment of 0.5 (Component.CENTER_ALIGNMENT Component.CENTER_ALIGNMENT). Component.CENTER_ALIGNMENT X alignment of 1.0 (Component.RIGHT_ALIGNMENT Component.RIGHT_ALIGNMENT) Component.RIGHT_ALIGNMENT
– – – – 所有top-to-bottom BoxLayout object 应该有相同的 X 所有 alignment。 。 所有left-to-right Boxlayout应该有相同的 Y alignment Boxlayout应该有相同的 所有 可以实现对齐。 setAlignmentX 和setAlignmentY 可以实现对齐。 大部分组件是center X and Y alignment ,而buttons, 大部分组件是 combo boxes, labels, and menu items 是 LEFT_ALIGNMENT
编写图形界面应用程序
布局管理器
5. GridBagLayout
编写图形界面应用程序
布局管理器
5. GridBagLayout
通过创建一个gridBagConstraints实例为组件 设置布局参数:
• • • • • • gridx, gridx gridy gridwidth, gridwidth gridheight fill ipadx, ipadx ipady insets anchor CENTER (the default), NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, and NORTHWEST. weightx, weightx weighty
编写图形界面应用程序
布局管理器
4. BoxLayout • 使用隐形 使用隐形Components作为填充。 作为填充。 作为填充
编写图形界面应用程序
布局管理器
4. BoxLayout • 使用隐形 使用隐形Components作为填充。 作为填充。 作为填充
– Rigid area Box.createRigidArea(size)
编写图形界面应用程序
布局管理器
4. BoxLayout 例子: 例子:
button1.setAlignmentY(Component.BOTTOM_ALIGNMENT); button2.setAlignmentY(Component.BOTTOM_ALIGNMENT);
编写图形界面应用程序
布局管理器 4. BoxLayout 例子: 例子:
container.add(firstComponent); container.add(Box.createRigidArea(new Dimension(5,0))); container.add(secondComponent);
编写图形界面应用程序
布局管理器
4. BoxLayout • 使用隐形 使用隐形Components作为填充。 作为填充。 作为填充 – Glue :horizontal - Box.createHorizontalGlue() vertical -Box.createVerticalGlue()
label.setAlignmentX(Component.CENTER_ALIGNMENT);
编写图形界面应用程序
布局管理器
5. GridBagLayout
• • • • 是在GridLayout的基础上发展起来的 为每个组件指定其包含的网格个数 组件可以保留原来的大小 可以以任意顺序加入容器的任意位置
布局管理器
综合例子: 综合例子: