一、JFrame的简单运用:

package com.test1;
import java.awt.*;
import javax.swing.*;
public class Demo1_1 extends JFrame{
	//定义按钮组件
		JButton jb1=null;
	public static void main(String[] args) {
		Demo1_1 dm=new Demo1_1();
	}
	//构造函数
	public Demo1_1()
	{
		//初始化按钮组件
		jb1=new JButton("按钮1");
		//添加组件
		this.add(jb1);
		
		//设置窗口标题
		this.setTitle("Hello world");
		//设置窗口大小,窗口大小的单位是像素
		this.setSize(200, 200);
		//设置窗口位置,窗口位置定义的是窗口最左上角的点的坐标
		this.setLocation(100, 100);
		//设置当关闭窗口时保证JVM也退出
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//显示窗口
		this.setVisible(true);
	}
}

二、布局管理器--介绍

1、概念:组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的。所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理。

2、种类:java共提供了五种布局管理器:流式布局管理器(FlowLayout)、边界布局管理器(BorderLayout)、网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、网格包布局管理器(GridBagLayout)。其中前三种是最常见的布局管理器。

介绍:

(一)、边界布局管理器(BorderLayout):将容器简单的划分为东南西北中五个区域,

中间区域最大,JFrame默认此布局。          

案例代码:

/*
 * BorderLayout演示
 * 1、继承JFrame
 * 2、定义你需要的组件
 * 3、创建组件(构造函数里初始化创建)
 * 4、添加组件(引用边界布局管理器来添加组件的过程中布局)
 * 5、对窗体的设置
 * 6、显示窗体
 */
package com.test1;
import java.awt.*;
import javax.swing.*;
public class Demo1_2 extends JFrame{
	//定义五个组件
	JButton jb1,jb2,jb3,jb4,jb5;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo1_2 dm=new Demo1_2();
	}
	//构造函数
	public Demo1_2()
	{
		//创建组件
		jb1=new JButton("中部");
		jb2=new JButton("北部");
		jb3=new JButton("东部");
		jb4=new JButton("南部");
		jb5=new JButton("西部");
		//添加组件
		this.add(jb1, BorderLayout.CENTER);
		this.add(jb2, BorderLayout.NORTH);
		this.add(jb3, BorderLayout.EAST);
		this.add(jb4, BorderLayout.SOUTH);
		this.add(jb5, BorderLayout.WEST);
		
		//设置窗体属性
		//窗体标题
		this.setTitle("边界布局案例");
		//设置窗体大小
		this.setSize(300, 300);
		//设置窗体位置
		this.setLocation(800, 400);
		//设置关闭窗体同时退出JVM
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//显示窗体
		this.setVisible(true);
	}
}



边界布局管理器(BorderLayout)--注意事项:

1、不是五个部分都必须添加

2、中部组件会自动的调节大小(中间部分最强势)

3、JFrame,JDialog默认布局管理器就是BorderLayout


(二)、流式布局管理器(FlowLayout): 按照组件添加的次序将定义的组件从左至右放置到容器中,当达到容器的边界时,组件将放置在下一行中。FloeLayout可以选择以左对齐、居中对齐、以右对齐的方式排列组件。

案例代码如下:

/*
 * 流式布局案例
 */
package com.test1;
import java.awt.*;
import javax.swing.*;
public class Demo1_3 extends JFrame{
	JButton jb1,jb2,jb3,jb4,jb5,jb6;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo1_3 dm=new Demo1_3();
	}
	
//构造
public Demo1_3()
{
	//创建组件
	jb1=new JButton("关羽");
	jb2=new JButton("张飞");
	jb3=new JButton("赵云");
	jb4=new JButton("马超");
	jb5=new JButton("黄忠");
	jb6=new JButton("魏延");
	
	//添加组件
	this.add(jb1);
	this.add(jb2);
	this.add(jb3);
	this.add(jb4);
	this.add(jb5);
	this.add(jb6);
	
	//设置布局管理器,流式布局默认是中间对齐,
	//我们要在new FlowLayout(FlowLayout.LEFT)设置,此时设置的是左对齐
	this.setLayout(new FlowLayout(FlowLayout.LEFT));
	
	//设置窗体属性
	//窗体标题
	this.setTitle("边界布局案例");
	//设置窗体大小
	this.setSize(300, 300);
	//设置窗体位置
	this.setLocation(800, 400);
	//设置关闭窗体同时退出JVM
	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	//显示窗体
	this.setVisible(true);
}
}


流式布局(FlowLayout)--注意事项

1、不限制他所管理的组件的大小,允许他们有最佳大小

2、当容器被缩放时,组件的位置可能变化,但是组件的大小不变

3、默认组件是居中对齐,可以通过FlowLayout(intalign)函数来指定对齐方式


(三)、网格布局GridLayout:它将容器分割成多行多列,组件被填充到每个网格中,添加到容器中的组件首先放置在左上角的网格中,然后从左到右放置其他的组件,当占满该行的所有网格后,接着继续在下一行从左至右放置组件。

案例代码如下:

/*
 * 网格布局演示
 */
package com.test1;
import java.awt.*;
import javax.swing.*;
public class Demo1_4 extends JFrame{
	//定义组件
	int size=9;
	JButton jbs[]=new JButton[size];
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Demo1_4 dm=new Demo1_4();
	}


	//构造
	public Demo1_4()
	{
		//创建组件
		for(int i=0;i<size;i++)
		{
			jbs[i]=new JButton(String.valueOf(i));
		}
		//设置网格布局管理器,设置3行3列,每个组件间隔水平方向10,垂直方向10 个像素
		this.setLayout(new GridLayout(3,3,10,10));
		//添加组件
		for(int i=0;i<size;i++)
		{
			this.add(jbs[i]);
		}
		
		//设置窗体属性
		this.setTitle("网格布局案例");
		this.setSize(300,300);
		this.setLocation(700,400);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
}


网格布局GridLayout --注意事项

1、组件的相对位置不随容器的缩放变化,但是组件的大小会变,也就是讲我们缩放窗口时组件之间的间隙是不会随之变化的,但是组件大小会等比例的变化

2、所有组件的大小是相同的

3、可以通过GridLayout(int rows,int cols,int hgap,int vgap)来指定网格的行/列,水平间隙/垂直间隙。






Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐