Java语言-概念-GUI布局管理器

一个容器中的各个组件之间的位置和大小关系就称为布局。Java语言提供了布局管理器来管理组件在容器中的布局,而不是直接使用位置坐标来设置各个组件的位置和大小。选择了容器之后,可以通过容器的setLayout()和getLayout()方法来确定布局(Layout),也就是限制容器中各个组件的位置和大小等。
Java提供了6中布局管理器,每个布局管理器都对应一种布局策略,分别是流式布局管理器(FlowLayout)、边界布局管理器(BorderLayout)、卡片布局管理器(CardLayout)、网格布局管理器(GridLayout)、网格包布局管理器(GridBagLayout)和网球布局管理器(BoxLayout)。

FlowLayout流式布局管理器

流式布局(FlowLayout)是最基本的一种布局。流式布局指的是把图形元件根据组件的preferredSize一个接一个地显示在面板上,如果一行显示不了所有的组件,会自动换到下一行显示。FlowLayout布局管理器是Panel、JApplet和JPanel默认的布局管理方式。
【例】流式布局管理器FlowLayout的应用。

package Swing;
import java.awt.*;
import javax.swing.*;
public class FlowLayout_Exam {
	static JFrame mainJFrame=new JFrame("流式布局管理器FlowLayout类的应用示例!");
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FlowLayout flow=new FlowLayout(FlowLayout.CENTER,5,10);
		mainJFrame.setSize(300, 200);
		Container container=mainJFrame.getContentPane();
		container.setLayout(flow);
		//将按钮对象btn加入到窗口内容面板中
		container.add(new JButton("JButton 1"));
		container.add(new JButton("JButton 2"));
		container.add(new JButton("JButton 3"));
		container.add(new JButton("Long-Named JButton 4"));
		container.add(new JButton("5"));
		//添加标签组件
		container.add(new JLabel("流式布局管理器FlowLayout"));
		//添加文本框组件
		container.add(new JTextField("流式布局策略FlowLayout",18));
		mainJFrame.setVisible(true);
	}
}

Java语言-概念-GUI布局管理器_第1张图片

BorderLayout边界布局管理器

边界布局管理器(BorderLayout)包括5个区:北区、南区、东区、西区和中区。这5个区在面板上的分布规律是“上北下南,左西右东”。将组件加入容器中时,应该指出把这个组件加在哪个区域中,若没有指定区域,则默认为中间。若将组件加入到已被占用位置时,将会取代原先的组件。BorderLayout是容器JFrame和对话框组件JDialog默认使用的布局管理器。
分布在北部和南部区域的组件将横向扩展至占据整个容器的长度,分布在东部和西部区域的组件将伸展至占据容器剩余部分的全部高度,最后剩余的部分将分配给位于中央区域的组件。如果某个区域没有分配组件,则其他组件可以占据它的空间。
在使用边界布局管理器BorderLayout时,利用add()方法向容器中添加组件时必须指出组件的摆放位置。组件的摆放位置主要包括BorderLayout.EAST、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.NORTH、BorderLayout.CENTER,共5类。
【例】边界布局管理器BorderLayout类的应用。

package Swing;
import java.awt.*;
import javax.swing.*;
public class BorderLayout_Exam {
	static JFrame mainJFrame=new JFrame("边界布局管理器的应用示例!");
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BorderLayout border=new BorderLayout(2,4);
		mainJFrame.setSize(250, 250);
		mainJFrame.setLocation(150, 150);
		Container container=mainJFrame.getContentPane();
		container.setLayout(border);//设置页面布局为BorderLayout
		container.setBackground(Color.green);//设置窗口底色为绿色
		container.add(new JButton("北"),BorderLayout.NORTH);
		container.add(new JButton("南"),BorderLayout.SOUTH);
		container.add(new JButton("东"),BorderLayout.EAST);
		container.add(new JButton("西"),BorderLayout.WEST);
		container.add(new JButton("中央"),BorderLayout.CENTER);
		mainJFrame.setVisible(true);
	}
}

Java语言-概念-GUI布局管理器_第2张图片
该程序创建了一个BorderLayout类的对象border,并设定组件的水平间距为5,垂直间距为10。通过调用add()方法将产生的5个命令按钮组件添加到窗口中,同时规定了该按钮在窗口中的摆放位置。

CardLayout卡片布局管理器

卡片布局管理器(CardLayout)把每个组件看做一张卡片,好像一副扑克牌,它们叠在一起,每次只有最外面的一个组件可以被看到,这个被显示的组件将占据所有的容器空间。在使用add()方法往窗口中添加组件时应对每个组件赋予一个名字,然后依据这个名字利用CardLayout类所提供的方法来控制其他组件是否显示。利用卡片布局管理器时,通常要用到多个容器,其中一个容器使用卡片布局管理器,而另外的容器使用其他布局管理器。
【例】卡片布局管理器CardLayout类的应用。

package Swing;
import java.awt.*;
import javax.swing.*;
public class CardLayout_Exam {
	static JFrame mainJFrame=new JFrame("卡片布局管理器类的应用示例!");
	static JPanel pnl1=new JPanel();
	static JPanel pnl2=new JPanel();
	static String[] str= {"第一页","上一页","下一页","最后页"};
	static CardLayout card=new CardLayout(5,10);//需将card定义为static类型
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		mainJFrame.setSize(360, 260);
		mainJFrame.setResizable(false);
		Container container=mainJFrame.getContentPane();
		container.setLayout(null);//取消内容面板的页面设置
		container.setBackground(Color.pink);//设置窗口底色为粉红色
		pnl1.setLayout(card);
		pnl1.setBounds(10, 10, 320, 160);
		pnl2.setLayout(new GridLayout(1,4));//将面板对象设置为1行4列的布局
		pnl2.setBounds(10, 180, 320, 35);
		for(int i=1;i<4;i++) {
			String str=new String("第"+i+"页");
			JTextField text=new JTextField("卡片策略布局!!"+str,30);
			//将文本组件text命名为t1后加入到面板中
			pnl1.add(text,"t"+i);
		}
		card.show(pnl1, "t3");
		for(int i=0;i<str.length;i++) {
			JButton b=new JButton(str[i]);
			pnl2.add(b);
		}
		container.add(pnl1);
		container.add(pnl2);
		mainJFrame.setVisible(true);
	}
}

Java语言-概念-GUI布局管理器_第3张图片该程序创建了一个窗口mainJFrame,两个面板对象pnl1和pnl2。pnl2设置成1行4列的网格页面布局,pnl1设置为卡片布局。两个面板通过add()方法添加到mainJFrame窗口中,pnl1面板上放置了3个文本框,pnl2面板上放置了4个命令按钮。

你可能感兴趣的:(Java语言)