JAVA基础之Swing窗体的几种布局

1、边框布局BorderLayout

特点:5个方位(东(East)南(north)西(west)北(south)中(center))

是一种简单的布局策略。

使用时,应将其看成一个“组件”。

同样,首先应通过构造器创建布局管理器对象,再通过引用其中的方法和变量来对组件进行布局。 表

2.2 BorderLayout布局管理器的构造器

书写案例:

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class LayoutDemo3 extends JFrame{

//要求:实例化对象操作放在类的里面,方法的外面(目的:使该对象能够具有最大权限化)

//1.实例化一个JPanel容器

private JPanel jpa = new JPanel();

//实例化一个边框布局的对象

private BorderLayout bl = new BorderLayout();

//按钮

private JButton jba = new JButton("菠萝");

private JButton jbb = new JButton("香蕉");

private JButton jbc = new JButton("香橙");

private JButton jbd = new JButton("香瓜");

private JButton jbe = new JButton("西瓜");

public LayoutDemo3() {

this.setTitle("布局案例");

this.setSize(400, 400);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

//设置容器的布局方式----边框布局

jpa.setLayout(bl);

jpa.add(jba,"North");

jpa.add(jbb,BorderLayout.SOUTH);

jpa.add(jbc,BorderLayout.EAST);

jpa.add(jbd,BorderLayout.WEST);

jpa.add(jbe,BorderLayout.CENTER);

//2.将容器添加到窗体面板上

this.getContentPane().add(jpa);

this.setVisible(true);

}

}

2.FlowLayout流式布局

特点:加入空间默认居中显示,如果再次加入,从左往右扩充,一行显示不了,会跨行默认中间显示

书写案例:

import java.awt.Color;

import java.awt.FlowLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class LayoutDemo extends JFrame{

//要求:实例化对象操作放在类的里面,方法的外面(目的:使该对象能够具有最大权限化)

//1.实例化一个JPanel容器

private JPanel jpa = new JPanel();

//private JPanel jpb = new JPanel();

//实例化一个流式布局的对象

private FlowLayout fl = new FlowLayout();

//按钮

private JButton jba = new JButton("我是按钮1");

private JButton jbb = new JButton("我是按钮2");

private JButton jbc = new JButton("我是按钮3");

private JButton jbd = new JButton("我是按钮4");

private JButton jbe = new JButton("我是按钮5");

public LayoutDemo() {

this.setTitle("布局案例");

this.setSize(400, 400);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

//设置2个容器的背景颜色

jpa.setBackground(Color.pink);

//jpa.setSize(400, 200);

//jpb.setBackground(Color.green);

//设置jpa容器的布局方式----流式布局

jpa.setLayout(fl);

jpa.add(jba);

jpa.add(jbb);

jpa.add(jbc);

jpa.add(jbd);

jpa.add(jbe);

//2.将容器添加到窗体面板上

this.getContentPane().add(jpa);

//this.getContentPane().add(jpb);

this.setVisible(true);

}

}

BorderLayout和FlowLayout结合方法

所有组件均“依次排列,没有如同BorderLayout布局管理器那样有5个不同的方位。

可以将BorderLayout布局管理器和FlowLayout布局管理器相结合给出一个实例。

思路:将FlowLayout布局管理器同顶层容器关联,然后在其中添加5个BorderLayout布局管理器,并在这5个布局管理器中添加组件。

◆ 代码主要是将FlowLayout布局管理器同顶层容器相关联, 然后再在其中添加5个布局管理器的内容面板;

◆ 为每一个内容面板添加5个组件,并按照BorderLayout布 局管理方式排列组件。

图像大致为:

3.GridLayout网格布局

特点:类似Excel表格,几行几列(实例化时,2个参数)

布局管理器类似“围棋盘”,将整个布局空间划分成若干行列相乘的“网格区域”,组件就位于这些小区域内。

要创建一个GridLayout布局管理器,必须通过其构造器来创建GridLayout布局管理器对象。

样式

GridLayout、BorderLayout、FlowLayout布局管理器相结合进行组件布局的方法

思路:用GridLayout布局管理器与顶层窗口关联,在这个布局管理器中添加FlowLayout布局管理器和BorderLayout布局管理器,最后在这些布局管理器中添加控件。

◆ 首先,用GirdLayout布局管理器与顶层窗口关联;

◆ 其次,在GridLayout中添加FlowLayout布局管理器和BorderLayout布局管理器;

◆ 最后,在这些(Flow&Border)布局管理器中添加控件。

书写案例:

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class LayoutDemo2 extends JFrame{

//要求:实例化对象操作放在类的里面,方法的外面(目的:使该对象能够具有最大权限化)

//1.实例化一个JPanel容器

private JPanel jpa = new JPanel();

//实例化一个网格布局的对象

private GridLayout gl = new GridLayout(3, 3);

//按钮

private JButton jba = new JButton("菠萝");

private JButton jbb = new JButton("香蕉");

private JButton jbc = new JButton("香橙");

private JButton jbd = new JButton("香瓜");

private JButton jbe = new JButton("西瓜");

private JButton jbf = new JButton("哈密瓜");

private JButton jbg = new JButton("榴莲");

private JButton jbh = new JButton("百香果");

private JButton jbi = new JButton("黑凤梨");

public LayoutDemo2() {

this.setTitle("布局案例");

this.setSize(400, 400);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

//设置容器的布局方式----网格布局

jpa.setLayout(gl);

jpa.add(jba);

jpa.add(jbb);

jpa.add(jbc);

jpa.add(jbd);

jpa.add(jbe);

jpa.add(jbf);

jpa.add(jbg);

jpa.add(jbh);

jpa.add(jbi);

//2.将容器添加到窗体面板上

this.getContentPane().add(jpa);

this.setVisible(true);

}

}

4.GridBagLayout网袋布局

特点:根据坐标设置控件的位置

◆ 网格包由多个网格组成,且各行、列的长度和宽度不同。但在默认情 况下,单元格从左上角开始有序列编号,从第0行、第0列开始计数。

◆ 当向GridBagLayout中添加组件时,需分别定义每个单元格的序列号, 只要设定相应的值,组件就会添加到网格包布局管理器中。

◆ 组件被添加到什么位置有4个参数,分别是gridX、gridY、gridwidth 、gridheight。

其中:gridX、gridY---定义添加组件时左上角的行与列的位置;

gridwidth、gridheight---定义组件所占用的列数和行数。

书写案例:

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JPasswordField;

import javax.swing.JTextField;

public class LayoutDemo4 extends JFrame {

// 1.实例化一个JPanel容器

private JPanel jpa = new JPanel();

// 实例化一个网袋布局对象

private GridBagLayout gbl = new GridBagLayout();

// 注意:网袋布局对象不能直接设置坐标,而是根据网袋布局的约束对象去约束(设置)控件的坐标

// 实例化网袋布局约束对象

private GridBagConstraints gbc = new GridBagConstraints();

// 账号文本标签对象

private JLabel jla = new JLabel("账号");

// 普通文本输入框

private JTextField jtfa = new JTextField(15);

// 密码文本标签对象

private JLabel jlb = new JLabel("密码");

// 密码文本框对象

private JPasswordField jpfa = new JPasswordField(15);

public LayoutDemo4() {

this.setTitle("布局案例");

this.setSize(400, 400);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setLocationRelativeTo(null);

// 设置容器的布局方式(网袋布局)

jpa.setLayout(gbl);

// 设置账号的文本标签坐标

gbc.gridx = 0;

gbc.gridy = 0;

// 将该坐标设置给JLabel账号标签

gbl.setConstraints(jla, gbc);

// 将设置好的jla添加到容器中

jpa.add(jla);

// 设置普通文本框的坐标(jtfa)

gbc.gridx = 1;

gbc.gridy = 0;

// 将该坐标设置给jtfa文本框对象

gbl.setConstraints(jtfa, gbc);

// 将设置好的jtfa组件添加到容器中

jpa.add(jtfa);

// 设置密码文本框的坐标(jlb)

gbc.gridx = 0;

gbc.gridy = 1;

// 将该坐标设置给jlb密码文本框对象

gbl.setConstraints(jlb, gbc);

// 将设置好的jlb组件添加到容器中

jpa.add(jlb);

// 设置密码文本框的坐标(jpfa)

gbc.gridx = 1;

gbc.gridy = 1;

// 将该坐标设置给jpfa密码文本框对象

gbl.setConstraints(jpfa, gbc);

// 将设置好的jpfa组件添加到容器中

jpa.add(jpfa);

// 2.将容器添加到窗体面板上

this.getContentPane().add(jpa);

this.setVisible(true);

}

}