三十三、Java图形化界面设计——布局管理器之null布局(空布局)
- 格式:docx
- 大小:34.57 KB
- 文档页数:4
三十一、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("网格布局计算机!");}}程序执行结果如下图:注意:这里一定要体会通过字符串数组和循环添加按钮的方法,以后添加菜单以及事件处理均采用这种方法,这种方法的好处在于,如果需要修改按钮顺序,直接修改字符串就可以了。
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(卡片布局)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(容器名称) 显示容器中当前组件之后的一个组件,若当前组件为最后添加的组件,则显示第一个组件,即卡片组件显示是循环的。
五种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布局⽅式(⼩结)⽬录流式布局边界布局卡⽚布局⾃定义布局流式布局采⽤流式布局会将元素按从左到右的顺序排列,如果⼀个元素在⼀⾏中放不下,那这个元素会另起⼀⾏依然按照从左到右的顺序排列⽰例:代码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布局内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
前言随着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图形化界面设计——布局管理器之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();
}
}
程序运行结果如下:。