GUI界面、AWT组件提供的6种布局管理器

1.1创建一个窗口

public class Frame1 {
	public static void main(String[] args) {
		//创建Frame对象
		Frame f = new Frame();
		//设置Frame大小
		f.setSize(300, 200);
		//设置位置
		f.setLocation(20, 30);
		//设置背景
		f.setBackground(Color.RED);
		//设置可见
		f.setVisible(true);
	}
}

1.2在窗口中增加面板

import java.awt.Color;
import java.awt.Frame;
import java.awt.Panel;

public class Frame1 {
	public static void main(String[] args) {
		//创建Frame对象
		Frame f = new Frame();
		//设置布局管理器为null
		f.setLayout(null);
		//设置Frame大小
		f.setSize(300, 200);
		//设置位置
		f.setLocation(20, 30);
		//设置背景
		f.setBackground(Color.RED);
		//创建一个panel
		Panel panel = new Panel(null);
		//创建panel的大小
		panel.setSize(100, 100);
		//创建panel的背景颜色
		panel.setBackground(Color.BLUE);
		//设置位置
		panel.setLocation(100,50);
		//将Panel添加到Frame中
		f.add(panel);
		//设置可见
		f.setVisible(true);
	}
}

2.1AWT提供的6中布局管理器

  1. BorderLayout——边界布局管理器:是Window及子类(Frame,Dialog)的默认布局管理器。组件布局效果:将整个容器分为东、西、南、北、中(East、West、South、North、Center)五部分,组件只能被添加到指定的区域,默认加的Center区域,每个区域只能加入一个组件,东西为垂直缩放,南北为水平缩放。
  2. BoxLayout——可以指定在容器中是否对控件进行水平或者垂直放置,比 FlowLayout 要更为灵活。https://www.ibm.com/developerworks/cn/java/j-lo-boxlayout/
  3. FlowLayout——流式布局管理器:可以让控件从左到有依次排序,排满一行就换下一行,行高是由控件高度决定的。FlowLayout是所以Panel类型容器的默认布局,默认情况下是居中(FlowLayout.CENTER)显示。
  4. GridBagLayou——是 Swing 当中最灵活也是最复杂的布局管理器,可对控件在容器中的位置进行比较灵活的调整。点击打开GridBagLayout链接                    第二个链接
  5. GridLayout——网格布局:将控件按网格排列,基本布局策略是把容器的控件划分为若干行和若干列而区域。
  6. CardLayout——卡片式布局:帮助用户处理两个以致更多的成员共享同一显示空间,它把容器分成许多层,每层的显示空间占据整个容器的大小,但是每层只运行放置一个组件。

2.1.1FlowLayout——流式布局管理器

/*FlowLayout流式布局管理器*/
public class FlowLayout1 {
	public static void main(String[] args) {
		// 居中
		layout("居中 ", FlowLayout.CENTER);
		// 开始边对齐
		layout("开始边对齐 ", FlowLayout.LEADING);
		// 向左对齐
		layout("向左对齐 ", FlowLayout.LEFT);
		// 向右对齐
		layout("向右对齐 ", FlowLayout.RIGHT);
		// 结束边对齐
		layout("结束边对齐 ", FlowLayout.TRAILING);
	}

	private static void layout(String title, int type) {
		//创建一个Frame,标题是title
		Frame frame = new Frame(title);
		//设置布局方式
		frame.setLayout(new FlowLayout(type));
		//设置窗口大小
		frame.setSize(400, 300);
		//设置位置
		frame.setLocation(20, 30);
		//设置背景
		frame.setBackground(Color.BLACK);
		//创建多个按钮
		Button but1= new Button("按钮1");
		Button but2= new Button("按钮2");
		Button but3= new Button("按钮3");
		Button but4= new Button("按钮4");
		frame.add(but1);
		frame.add(but2);
		frame.add(but3);
		frame.add(but4);
		frame.setVisible(true);
	}
}

2.1.2BorderLayout——边界布局管理器

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;

public class BorderLayout1 {
	public static void main(String[] args) {
		//创建一个Frame,标题是BorderLayout布局
		Frame frame = new Frame("BorderLayout布局");
		//设置Frame的大小
		frame.setSize(400, 300);
		//设置布局管理器
		frame.setLayout(new BorderLayout(20, 20));
		//创建5个按钮,分别挡在Frame的东西南北中
		Button but1= new Button("按钮1");
		Button but2= new Button("按钮2");
		Button but3= new Button("按钮3");
		Button but4= new Button("按钮4");
		Button but5= new Button("按钮5");
		frame.add(but1, BorderLayout.CENTER);
		frame.add(but2, BorderLayout.EAST);
		frame.add(but3, BorderLayout.WEST);
		frame.add(but4, BorderLayout.SOUTH);
		frame.add(but5, BorderLayout.NORTH);
		//设置可见
		frame.setVisible(true);
	}
}	

2.1.3GridLayout网格布局

import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;

public class GridLayout1 {
	public static void main(String[] args) {
		// 创建Frame,标题为GridLayout网格布局
		Frame f = new Frame("GridLayout网格布局");
		// 设置大小
		f.setSize(500, 400);
		// 设置位置
		f.setLocation(50, 50);
		// 设置布局管理器
		f.setLayout(new GridLayout(4, 3, 5, 5));
		// 添加按钮
		for (int i = 0; i < 4 * 3; i++) {
			Button but = new Button("按钮" + i);
			f.add(but);
		}
		// 设置显示可见
		f.setVisible(true);
	}
}

2.1.4CardLayout——卡片式布局

/*卡片式布局管理器*/
public class CardLayoutDemo extends JFrame {
	private JPanel pane = null;// 主要的JPanel,该JPanel的布局管理将被设置成CradLayout
	private JPanel p = null;// 放置按钮的JPanel
	private CardLayout card = null;// CardLayout布局管理器
	private JButton button_1 = null;// 上一步
	private JButton button_2 = null;// 下一步
	private JButton b_1 = null, b_2 = null, b_3 = null;// 三个可直接翻转到JPanel组件的按钮
	private JPanel p_1 = null, p_2 = null, p_3 = null;// 要切换的三个JPanel

	public CardLayoutDemo() {
		card = new CardLayout(5, 5);
		pane = new JPanel(card);// JPanel的布局管理器将被设置成CardLayout
		p = new JPanel();// 构造放置按钮的JPanel
		button_1 = new JButton("<上一步");
		button_2 = new JButton("下一步>");
		b_1 = new JButton("1");
		b_2 = new JButton("2");
		b_3 = new JButton("3");
		b_1.setMargin(new Insets(2, 2, 2, 2));//设置边缘空隙,上下左右都为2
		b_2.setMargin(new Insets(2, 2, 2, 2));
		b_3.setMargin(new Insets(2, 2, 2, 2));
		p.add(button_1);
		p.add(b_1);
		p.add(b_2);
		p.add(b_3);
		p.add(button_2);
		p_1 = new JPanel();
		p_2 = new JPanel();
		p_3 = new JPanel();
		p_1.setBackground(Color.RED);
		p_2.setBackground(Color.BLUE);
		p_3.setBackground(Color.GREEN);
		p_1.add(new JLabel("Jpanel_1"));
		p_2.add(new JLabel("Jpanel_2"));
		p_3.add(new JLabel("Jpanel_3"));
		pane.add(p_1, "p1");
		pane.add(p_2, "p2");
		pane.add(p_3, "p3");

		button_1.addActionListener(new ActionListener() {// 上一步的按钮动作

			@Override
			public void actionPerformed(ActionEvent e) {
				card.previous(pane);//前一个
			}
		});
		button_2.addActionListener(new ActionListener() {// 下一步的按钮动作

			@Override
			public void actionPerformed(ActionEvent e) {
				card.next(pane);
			}
		});
		b_1.addActionListener(new ActionListener() {// 直接翻转到p_1

			@Override
			public void actionPerformed(ActionEvent e) {
				card.show(pane, "p1");
			}
		});
		b_2.addActionListener(new ActionListener() {// 直接翻转到p_2

			@Override
			public void actionPerformed(ActionEvent e) {
				card.show(pane, "p2");
			}
		});
		b_3.addActionListener(new ActionListener() {// 直接翻转到p_3

			@Override
			public void actionPerformed(ActionEvent e) {
				card.show(pane, "p3");
			}
		});
		this.getContentPane().add(pane);
		this.getContentPane().add(p, BorderLayout.SOUTH);
		this.setSize(300,300);
		this.setVisible(true);
	}


你可能感兴趣的:(J2SE(java基础部分))