三十三、Java图形化界面设计——布局管理器之null布局(空布局)
三十一、Java图形化界面设计——布局管理器之GridLayout(网格布局)
三十一、Java图形化界面设计——布局管理器之GridLayout (网格布局)网格布局特点:l 使容器中的各组件呈M行×N列的网格状分布。
l 网格每列宽度相同,等于容器的宽度除以网格的列数。
l 网格每行高度相同,等于容器的高度除以网格的行数。
l 各组件的排列方式为:从上到下,从左到右。
l 组件放入容器的次序决定了它在容器中的位置。
l 容器大小改变时,组件的相对位置不变,大小会改变。
l 设置网格布局行数和列数时,行数或者列数可以有一个为零。
若rows 为0,cols为3,则列数固定为3,行数不限,每行只能放3个控件或容器。
若cols为0,rows为3,则行数固定为3,列数不限,且每行必定有控件,若组件个数不能整除行数,则除去最后一行外的所有行组件个数为:Math.ceil(组件个数/rows)。
Math.ceil(double x):传回不小于x的最小整数值。
比如行数为3,组件数为13个,则Math.ceil(13/3)=5,即第一行,第二行组件数各为5个,剩下的组件放在最后一行。
l 若组件数超过网格设定的个数,则布局管理器会自动增加网格个数,原则是保持行数不变。
实例一://GridLayoutDemo.javaimport javax.swing.*;import java.awt.*;public class GridLayoutDemo extends JFrame { public GridLayoutDemo() {setLayout(new GridLayout(0,2)); //设置为网格布局,未指定行数setFont(new Font("Helvetica", Font.PLAIN, 14));getContentPane().add(new JButton("Button 1"));getContentPane().add(new JButton("Button 2"));getContentPane().add(new JButton("Button 3"));getContentPane().add(new JButton("Button 4"));getContentPane().add(new JButton("Button 5"));}public static void main(String args[]) {GridLayoutDemo f = new GridLayoutDemo();f.setTitle("GridWindow Application");f.pack();f.setVisible(true);f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setLocationRelativeTo(null); //让窗体居中显示}}程序结果如下图所示:实例二:布局一个简单的计算器思路:对窗体应用边界布局,在NORTH上放置一个文本框,在CENTER 上放置一个面板,面板上放置计算器的相应按钮//GridFrame.Javaimport java.awt.*;import javax.swing.*;class GridFrame extends JFrame{//定义面板,并设置为网格布局,4行4列,组件水平、垂直间距均为3JPanel p=new JPanel(new GridLayout(4,4,3,3));JTextArea t=new JTextArea(); //定义文本框//定义字符串数组,为按钮的显示文本赋值//注意字符元素的顺序与循环添加按钮保持一致Stringstr[]={"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};public GridFrame(String s){super(s); //为窗体名称赋值setLayout(new BorderLayout()); //定义窗体布局为边界布局JButton btn[]; //声明按钮数组btn=new JButton[str.length]; //创建按钮数组//循环定义按钮,并添加到面板中for(int i=0;i<str.length;i++){btn[i]=new JButton(str[i]);p.add(btn[i]);}//将文本框放置在窗体NORTH位置getContentPane().add(t,BorderLayout.NORTH);//将面板放置在窗体CENTER位置getContentPane().add(p,BorderLayout.CENTER);setVisible(true);setSize(250,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocationRelativeTo(null); //让窗体居中显示 }public static void main(String[] args){GridFrame gl=new GridFrame("网格布局计算机!");}}程序执行结果如下图:注意:这里一定要体会通过字符串数组和循环添加按钮的方法,以后添加菜单以及事件处理均采用这种方法,这种方法的好处在于,如果需要修改按钮顺序,直接修改字符串就可以了。
Java 布局管理器
•
编写图形界面应用程序
布局管理器
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.布局管理器
6
举例:FlowLayout 常用方法
int getHgap()//返回组件的水平间隔 void setHgap(int hgap) ()//设定组件的水平间隔 int getVgap() //返回组件的垂直间隔 void setVgap(int hgap) //设定组件的垂直间隔 int getAlignment() //返回组件的对齐方式 void setAlignment(int align) //设定组件的对齐方式
13
null
称为无布局管理器。 可以随心所欲安排容器,但是跨平台时,可能发生变 化。
14
布局管理器-小结
小 结: 1.JFrame是一个顶级窗口。JFrame的缺省布局管理器为BorderLayout。 2.JPanel 无法单独显示,必须添加到某个容器中。 JPanel 的缺省布局 管理器为FlowLayout。 setBounds(x,y,weigh 3.当把JPanel 作为一个组件添加到某个容器中后,该JPanel 仍然可以有 ,heigh) 自己的布局管理器。因此,可以利用JPanel 使得BorderLayout 中某个区 设定窗体的位置和大小, 域显示多个组件,达到设计复杂用户界面的目的 其中x,y为左上角的坐 。 4.如果采用无布局管理器 setLayout(null),则必须使用 标,weight和height为 weight height setLocation(),setSize(),setBounds()等方法手工设置组件的大小和位置, 宽度和高度 此方法会导致平台相关,不鼓励使用。
第13章 Swing程序设计 ——常用布局管理器
1
本单元内容
复习组件JLabel JButton JToggleButton、JCheckBox 布局管理器 常用布局管理器 绝对布局 null 流布局 FlowLayout 边界布局 BorderLayout 网格布局 GridLayout
Java语言程序设计课件——布局管理器
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++)
JavaGUI布局管理器
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图形化界面设计——布局管理器之CardLayout(卡片布局)
本文由我司收集整编,推荐下载,如有疑问,请与我司联系Java 图形化界面设计——布局管理器之CardLayout(卡片布局)2017/02/17 0 卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout 类提供的方法可以切换该空间中显示的组件。
1、CardLayout 类的常用构造函数及方法
2、使用CardLayout 类提供的方法可以切换显示该空间中的组件
方法一步骤:
(1)定义使用卡片布局的容器
例如:Panel cardPanel=new Panel();
(2)定义卡片对象:CardLayout 布局对象名称=new CardLayout();
例如:CardLayout card=new CardLayout();
(3)设置使用卡片布局的容器为卡片布局:
格式:容器名称.setLayout(布局对象名称);
例如:cardPanel.setLayout(card);
(4)设置容器中显示的组件
例如:for (int i = 0; i i++) {
cardPanel.add(newJButton(“按钮”+i));
}
(5)定义响应事件代码,让容器显示相应的组件
格式:
n 布局对象名称.next(容器名称) 显示容器中当前组件之后的一个组件,若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。
java布局的总结
第1、2两点可以综合为:
FlowLayout flow=new FlowLayout(FlowLayout.LEFT,2,8);
五:空布局格式:
我们可以把一个容器的布局设置为null布局(空布局)。
空布局容器可以准确地定位组件在容器的位置和大小。
setBounds(int a,int b,int width,int height)
方法是所有组件都拥有的一个方法,
组件调用该方法可以设置本身的大小和在容器中的位置。
例如,p是某个容器:
p.setLayout(null);
把p的布局设置为空布局。
向空布局的容器p添加一个组件c需要两个步骤,
距容器上方b个像素;weidth,height是组件c的宽和高。
六:GridLayout网格布局的规则:
将容器划分为大小相同的网格,最多可添加m×n个组件,
每个网格都是相同大小并且强制组件与源自格的大小相同 (即每个网格只能放一个组件);
具体实现方法:
构造方法
GridLayout(int m,int n)
BoxLayout在java.swing.border包中。
java swing包提供了Box类,该类也是Container类的一个子类,
创建的容器称作一个盒式容器,盒式容器的的默认布局是盒式布局,
而且不允许更改盒式容器的布局。
因此,在策划程序的布局时,可以利用容器的嵌套,
将某个容器嵌入几个盒式容器,达到你的布局目的。
一:边界布局的结构:
BorderLayout 布局是Window型容器的默认布局,
例如JFrame、JDialog都是Window类的间接子类,
五种JAVAGUI布局管理的方式
五种JAVAGUI布局管理的⽅式1. 流式布局(FlowLayout)定义:通俗地说,流式布局就是根据窗⼝⼤⼩,⾃动改变窗⼝内组件的位置。
例如:原窗⼝⼤⼩⼀⾏可以容纳10个BUTTON,但将窗⼝缩⼩后,每⾏仅能容纳5个BUTTON,此时原先的10个BUTTON中的五个就会⾃动排列到下⼀⾏。
⽰例:(省略panel的使⽤)Hashsetpackage 布局管理;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class Layout { //流式布局public static void main(String[] args) {Frame frame = new Frame(); //创建⼀个窗⼝frame.setLayout(new FlowLayout(FlowLayout.LEFT)); //将窗⼝布局设置为流式布局,并设置向左对齐Button button1 = new Button("button1"); //创建若⼲个按钮Button button2 = new Button("button2");Button button3 = new Button("button3");Button button4 = new Button("button4");Button button5 = new Button("button5");frame.add(button1); //将按钮添加进窗⼝中frame.add(button2);frame.add(button3);frame.add(button4);frame.add(button5);frame.setBounds(200,200,500,500); //设置窗⼝的位置与⼤⼩frame.setVisible(true); //设置窗⼝可见性frame.addWindowListener(new WindowAdapter() { //事件监听:关闭窗⼝@Overridepublic void windowClosing(WindowEvent e) {System.exit(0);}});}}2. 东西南北中布局(BorderLayout)定义:东西南北中布局,顾名思义。
Java图形界面GUI布局方式(小结)
Java图形界⾯GUI布局⽅式(⼩结)⽬录流式布局边界布局卡⽚布局⾃定义布局流式布局采⽤流式布局会将元素按从左到右的顺序排列,如果⼀个元素在⼀⾏中放不下,那这个元素会另起⼀⾏依然按照从左到右的顺序排列⽰例:代码public class Test {public static void main(String[] args) {// 创建窗⼝JFrame jFrame = new JFrame();// 设置窗⼝名称jFrame.setTitle("hello");// 创建流式布局管理器对齐⽅式为左对齐LayoutManager layout = new FlowLayout(FlowLayout.LEFT);// 关闭窗⼝结束程序jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 创建内容⾯板Container contentpage = jFrame.getContentPane();// 设置内容⾯板布局⽅式为流布局contentpage.setLayout(layout);// 创建按钮JButton button1 = new JButton("1");JButton button2 = new JButton("2");JButton button3 = new JButton("3");JButton button4 = new JButton("4");JButton button5 = new JButton("5");// 设置按钮⼤⼩button1.setPreferredSize(new Dimension(100,100));button2.setPreferredSize(new Dimension(100,100));button3.setPreferredSize(new Dimension(100,100));button4.setPreferredSize(new Dimension(100,100));button5.setPreferredSize(new Dimension(100,100));// 设置按钮背景颜⾊button1.setBackground(Color.red);button2.setBackground(Color.blue);button3.setBackground(Color.pink);button4.setBackground(Color.orange);button5.setBackground(Color.yellow);// 将按钮添加到内容⾯板中contentpage.add(button1);contentpage.add(button2);contentpage.add(button3);contentpage.add(button4);contentpage.add(button5);// 设置窗⼝⼤⼩jFrame.setSize(500, 300);// 设置窗⼝可见jFrame.setVisible(true);}}边界布局采⽤边界布局会将元素分别划分到东,西,中,南,北五个⽅位,分别使⽤EAST,WEST,CENTER,SOUTH,NORTH标识,每个⽅位只能放⼀个元素⽰例代码public class Test {public static void main(String[] args) {// 创建窗⼝JFrame jFrame = new JFrame();// 设置窗⼝名称jFrame.setTitle("hello");// 创建边界布局管理器BorderLayout layout = new BorderLayout();// 关闭窗⼝结束程序jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 创建内容⾯板Container contentpage = jFrame.getContentPane();// 设置内容⾯板布局⽅式为流布局contentpage.setLayout(layout);// 创建按钮JButton button1 = new JButton("1");JButton button2 = new JButton("2");JButton button3 = new JButton("3");JButton button4 = new JButton("4");JButton button5 = new JButton("5");// 设置按钮背景颜⾊button1.setBackground(Color.red);button2.setBackground(Color.blue);button3.setBackground(Color.pink);button4.setBackground(Color.orange);button5.setBackground(Color.yellow);// 将按钮添加到内容⾯板中// 将按钮放置到北部contentpage.add(button1,BorderLayout.NORTH);// 将按钮放置到南部contentpage.add(button2,BorderLayout.SOUTH);// 将按钮放置到西部contentpage.add(button3,BorderLayout.WEST);// 将按钮放置到东部contentpage.add(button4,BorderLayout.EAST);// 将按钮放置到中⼼contentpage.add(button5,BorderLayout.CENTER);// 设置窗⼝⼤⼩jFrame.setSize(500, 300);// 设置窗⼝可见jFrame.setVisible(true);}}卡⽚布局顾名思义,若⼀个容器使⽤卡⽚布局,其⾥⾯的所有组件就像是⼀副牌⼀样重叠在⼀起,容器只能显⽰⼀个组件,默认显⽰第⼀个组件,可以通过CardLayout中的show⽅法改变显⽰的组件⽰例显⽰第⼀个按钮显⽰第⼆个按钮代码public class Test {public static void main(String[] args) {// 创建窗⼝JFrame jFrame = new JFrame();// 设置窗⼝名称jFrame.setTitle("hello");// 创建卡⽚布局管理器CardLayout layout = new CardLayout();// 关闭窗⼝结束程序jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 创建⾯板JPanel jPanel = new JPanel();// 设置⾯板布局⽅式为卡⽚布局jPanel.setLayout(layout);// 添加按钮设置背景颜⾊JButton jButton1 = new JButton();jButton1.setBackground(Color.pink);JButton jButton2 = new JButton();jButton2.setBackground(Color.yellow);// 将按钮添加到⾯板中并对按钮进⾏命名jPanel.add(jButton1,"bt1");jPanel.add(jButton2,"bt2");// 指定在⾯板上显⽰的按钮layout.show(jPanel, "bt2");// 将⾯板添加到窗⼝中jFrame.add(jPanel);// 设置窗⼝⼤⼩jFrame.setSize(500,300);// 设置窗⼝可见jFrame.setVisible(true);}}⾃定义布局所谓⾃定义布局就是不使⽤任何布局管理器,⽽是我们⾃⼰通过指定组件的X坐标,Y坐标,宽度,⾼度来指定组件的位置这⾥的坐标和我们平时的坐标有些区别,如下:组件是以左上⾓顶点为原点来定位坐标,使⽤⾃定义布局,要将容器使⽤的布局管理器设置为null那有的⼩伙伴会问了,既然布局管理器设置为null,那可不可以直接不设置啊,当然不⾏,如果不设置的话,组件会不显⽰⽰例代码public class Test {public static void main(String[] args) {// 创建窗⼝JFrame jFrame = new JFrame();// 设置窗⼝名称jFrame.setTitle("hello");// 关闭窗⼝同时结束程序jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 创建⾯板JPanel jPanel = new JPanel();// 使⽤⾃定义布局,将容器使⽤的布局管理器设置为nulljPanel.setLayout(null);// 添加按钮设置背景颜⾊JButton jButton1 = new JButton();jButton1.setBackground(Color.pink);JButton jButton2 = new JButton();jButton2.setBackground(Color.yellow);// 设置按钮的坐标为(100,100) ,宽度为100,⾼度为100jButton1.setBounds(new Rectangle(100,100,100,100));// 设置按钮的坐标为(220,70) ,宽度为100,⾼度为100jButton2.setBounds(new Rectangle(220,70,100,100));// 将按钮添加到⾯板中jPanel.add(jButton1);jPanel.add(jButton2);// 将⾯板添加到窗⼝中jFrame.add(jPanel);// 设置窗⼝⼤⼩jFrame.setSize(500,300);// 设置窗⼝可见jFrame.setVisible(true);}}到此这篇关于Java图形界⾯GUI布局⽅式(⼩结)的⽂章就介绍到这了,更多相关Java GUI布局内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
Java中的布局管理器
前言随着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的布局管理器
北京开放大学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布局管理
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 , 那么这个区域就不会在那个方向上扩张或收缩,超 出它的初始大小。 从概念上讲,增量参数属于行和列的属性,而不 属于摸个单独的单元格。但却需要在单元格上指定 它们,这是因为网格组布局并不暴露行和列。 注意,增量并不实际给出列的相对大小
图形用户界面设计
中间容器(Jpanel)
1. 将组件添加到JFrame中 2. JPanel的使用
30
1、 将组件添加到JFrame中
方式之一: frame.getContentPane().add(childCom
ponent) 用getContentPane()方法获得JFrame的
内容面板,再对其加入组件,一般只使 用该方式添加组件。
Swing 是为了解决 AWT 存在的问题而 新开发的包,它以 AWT 为基础的。
10
上图列举了AWT和 Swing的关系,也可 以看出Swing是继承自AWT的。主要利 用Swing来设计图形化界面程序。
11
图形化界面设计—容器
1. Java基本类(JFC) 2. AWT和Swing的区别 3. Swing基本框架 4. 图形化设计步骤 5. 组件容器的使用
54
实例:
55
实例:
56
实例二:在中间位置中添加9个按钮
57
58
布局管理器之GRIDLAYOUT(网 格布局)
59
网格布局特点:
使容器中的各组件呈M行×N列的网格状分布。 网格每列宽度相同,等于容器的宽度除以网格
的列数。 网格每行高度相同,等于容器的高度除以网格
的行数。 各组件的排列方式为:从上到下,从左到右。 组件放入容器的次序决定了它在容器中的位置。 l容器大小改变时,组件的相对位置不变,大小
图形用户界面设计
1
Java图形化界面设计——容器 (JFrame)
2
程序是为了方便用户使用的,因此实现 图形化界面的程序编写是所有编程语言 发展的必然趋势,在命令提示符下运行 的程序可以让我们了解java程序的基本 知识体系结构,现在就进入java图形化 界面编程。
java中Swing五种常见的布局方式
java中Swing五种常见的布局⽅式1、边界布局(BorderLayout)2、流式布局(FlowLayout)3、⽹格布局(GridLayout)4、盒⼦布局(BoxLaYout)5、空布局(null)还有其他两种布局,分别是GridBagLayout(⽹格包布局)、CardLayout(卡⽚布局)注意:JFrame和JDialog默认布局为BorderLayout,JPanel和Applet默认布局为FlowLayout边界布局⽰例代码:import java.awt.BorderLayout;import javax.swing.JButton;import javax.swing.JFrame;public class BorderLayoutExample extends JFrame{JButton btn1=new JButton("东");JButton btn2=new JButton("南");JButton btn3=new JButton("西");JButton btn4=new JButton("北");JButton btn5=new JButton("中");BorderLayoutExample(){init();this.setTitle("边界布局");this.setResizable(true);this.setSize(200, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new BorderLayout(10,5)); //默认为0,0;⽔平间距10,垂直间距5this.add(btn1,BorderLayout.EAST);this.add(btn2,BorderLayout.SOUTH);this.add(btn3,BorderLayout.WEST);this.add(btn4,BorderLayout.NORTH);this.add(btn5,BorderLayout.CENTER);}public static void main(String args[]){new BorderLayoutExample();}}运⾏结果:流式布局⽰例代码:import java.awt.FlowLayout;import javax.swing.JButton;import javax.swing.JFrame;public class FlowLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");FlowLayoutExample(){init();this.setTitle("流式布局");this.setResizable(true);this.setSize(200, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new FlowLayout(FlowLayout.LEFT,10,5)); //默认为居中;⽔平间距10,垂直间距5 this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new FlowLayoutExample();}}运⾏结果:⽹格布局⽰例代码:import java.awt.GridLayout;import javax.swing.JButton;import javax.swing.JFrame;public class GridLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");GridLayoutExample(){init();this.setTitle("表格布局");this.setResizable(true);this.setSize(300, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new GridLayout(2,3,10,5)); //默认为1⾏,n列;2⾏3列,⽔平间距10,垂直间距5 this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new GridLayoutExample();}}运⾏结果:盒⼦布局⽰例代码:import javax.swing.Box;import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JFrame;public class BoxLaYoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");BoxLaYoutExample(){init();this.setTitle("表格布局");this.setResizable(true);this.setSize(300, 200);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(new BoxLayout(this.getContentPane(),BoxLayout.X_AXIS));//可以使⽤Box容器代替//Box box = new Box(BoxLayout.Y_AXIS);box.add(btn...);box.add(creat..);this.add(btn1);this.add(btn2);this.getContentPane().add(Box.createHorizontalStrut(10)); //采⽤x布局时,添加固定宽度组件隔开 //this.getContentPane().add(Box.createVerticalStrut(5)); //采⽤y布局时,添加固定⾼度组件隔开 this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new BoxLaYoutExample();}}运⾏结果:空布局⽰例代码:import javax.swing.JButton;import javax.swing.JFrame;public class NullLayoutExample extends JFrame{JButton btn1=new JButton("one");JButton btn2=new JButton("two");JButton btn3=new JButton("three");JButton btn4=new JButton("four");JButton btn5=new JButton("five");NullLayoutExample(){init();this.setTitle("空布局");this.setResizable(true);this.setSize(300, 300);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setVisible(true);}void init(){this.setLayout(null);btn1.setBounds(10, 0, 100, 50); //x坐标10,y坐标0,组件宽100,⾼50 btn2.setBounds(20, 50, 100, 50);btn3.setBounds(30, 100, 100, 50);btn4.setBounds(40, 150, 100, 50);btn5.setBounds(50, 200, 100, 50);this.add(btn1);this.add(btn2);this.add(btn3);this.add(btn4);this.add(btn5);}public static void main(String args[]){new NullLayoutExample();}}运⾏结果:。
JAVA布局
card.previous(panelMain); /n); //第一个
示例:
import java.awt.*;
public class buttonDir{
public static void main(String args[]){
Frame f = new Frame("BorderLayout");
GridBagConstraints.NONE:以最小尺寸显示组件;
GridBagConstraints.HORIZONTAL:组件沿水平方向伸展;
GridBagConstraints.VERTICAL:组件沿垂直方向伸展。
约束anchor决定单元格如何显示。 auchor取值GridBagConstraints中的四个类变量:
CardLayout(卡式布局)
CardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只允许放置一个组件,当然每层都可以利用Panel来实现复杂的用户界面.布局管理器(CardLayout)就象一副叠得整整齐齐的扑克牌一样,有54张牌,但是你只能看见最上面的一张牌,每一张牌就相当于布局管理器中的每一层.其实现过程如下:
JPanel panel= new JPanel(new FlowLayout(FlowLayout.LEFT)));
此为小应用程序(Applet)和面板(Panel)的缺省布局管理器,组件从左上角开始,按从左至右的方式排列.其构造函数为:
FlowLayout() //生成一个默认的流式布局,组件在容器里居中,每个组件之间留下5个像素的距离.
三十三、Java图形化界面设计——布局管理器之null布局(空布局)
三十三、Java图形化界面设计——布局管理器之null布局(空布局)一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到空布局。
操作方法:1)首先利用setLayout(null)语句将容器的布局设置为null布局(空布局)。
2)再调用组件的setBounds(int x, int y, int width,int height)方法设置组件在容器中的大小和位置,单位均为像素。
x为控件左边缘离窗体左边缘的距离y为控件上边缘离窗体上边缘的距离width为控件宽度height为控件高度实例:使用空布局精确定位组件的位置// NullLayoutDemo.javaimport java.awt.*;import javax.swing.*;public class NullLayoutDemo{ JFrame fr;JButton a,b; NullLayoutDemo() {fr = new JFrame();fr.setBounds(100,100,250,150);//设置窗体为空布局fr.setLayout(null);a=new JButton("按钮a");b=new JButton("按钮b");fr.getContentPane().add(a);//设置按钮a的精确位置a.setBounds(30,30,80,25);fr.getContentPane().add(b);b.setBounds(150,40,80,25);fr.setTitle("NullLayoutDemo");fr.setVisible(true);fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);fr.setLocationRelativeTo(null); //让窗体居中显示}public static void main(String args[]){new NullLayoutDemo();}}程序运行结果如下:。
java_图形界面_布局管理_流式布局_JFrame_FlowLayout
/*** 图形界面* 布局管理* 流式布局* 理解设置布局方式*/package com.test1;//package com.GUI;import java.awt.*;import javax.swing.*;public class Demo8_3 extends JFrame{JButton jb1,jb2,jb3,jb4,jb5,jb6;public static void main(String[] args){Demo8_3 demo8_3= new Demo8_3();}public Demo8_3(){jb1=new JButton("aaa");jb2=new JButton("bbb");jb3=new JButton("ccc");jb4=new JButton("ddd");jb5=new JButton("eee");jb6=new JButton("fff");//添加组件this.add(jb1);this.add(jb2);this.add(jb3);this.add(jb4);this.add(jb5);this.add(jb6);//设置布局管理器this.setLayout(new FlowLayout(FlowLayout.RIGHT));//设置布局方式(流式布局(流式布局.右对齐))//显示this.setTitle("流式布局案例");//标题this.setResizable(false);//设置窗口大小不变this.setLocation(300, 200); //窗体位置,左上角坐标this.setSize(250, 450); //窗口大小this.setDefaultCloseOperation(EXIT_ON_CLOSE);//关闭时退出this.setVisible(true);//显示JFrame对象窗口}}//setLayout()设置用户界面上的屏幕组件的格式布局,是java图形界面编程的常用方法。
Java图形化界面设计——布局管理器之CardLayout(卡片布局)
Java图形化界面设计——布局管理器之CardLayout(卡片布
局)
本文由我司收集整编,推荐下载,如有疑问,请与我司联系Java 图形化界面设计——布局管理器之CardLayout(卡片布局)2017/02/17 0 卡片布局能够让多个组件共享同一个显示空间,共享空间的组件之间的关系就像一叠牌,组件叠在一起,初始时显示该空间中第一个添加的组件,通过CardLayout 类提供的方法可以切换该空间中显示的组件。
1、CardLayout 类的常用构造函数及方法
2、使用CardLayout 类提供的方法可以切换显示该空间中的组件
方法一步骤:
(1)定义使用卡片布局的容器
例如:Panel cardPanel=new Panel();
(2)定义卡片对象:CardLayout 布局对象名称=new CardLayout();
例如:CardLayout card=new CardLayout();
(3)设置使用卡片布局的容器为卡片布局:
格式:容器名称.setLayout(布局对象名称);
例如:cardPanel.setLayout(card);
(4)设置容器中显示的组件
例如:for (int i = 0; i i++) {
cardPanel.add(newJButton(“按钮”+i));
}
(5)定义响应事件代码,让容器显示相应的组件
格式:
n 布局对象名称.next(容器名称) 显示容器中当前组件之后的一个组件,若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三十三、Java图形化界面设计——布局管理器之null布局(空布局)
一般容器都有默认布局方式,但是有时候需要精确指定各个组建的大小和位置,就需要用到空布局。
操作方法:
1)首先利用setLayout(null)语句将容器的布局设置为null布局(空布局)。
2)再调用组件的setBounds(int x, int y, int width,int height)方法设置组件在容器中的大小和位置,单位均为像素。
x为控件左边缘离窗体左边缘的距离
y为控件上边缘离窗体上边缘的距离
width为控件宽度
height为控件高度
实例:使用空布局精确定位组件的位置
// NullLayoutDemo.java
import java.awt.*;
import javax.swing.*;
public class NullLayoutDemo{ JFrame fr;
JButton a,b; NullLayoutDemo() {
fr = new JFrame();
fr.setBounds(100,100,250,150);
//设置窗体为空布局
fr.setLayout(null);
a=new JButton("按钮a");
b=new JButton("按钮b");
fr.getContentPane().add(a);
//设置按钮a的精确位置
a.setBounds(30,30,80,25);
fr.getContentPane().add(b);
b.setBounds(150,40,80,25);
fr.setTitle("NullLayoutDemo");
fr.setVisible(true);
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setLocationRelativeTo(null); //让窗体居中显示}
public static void main(String args[]){
new NullLayoutDemo();
}
}
程序运行结果如下:。