我们先分析一下:
用BorderLayout显然是不合适的,账号和密码占据的位置差不多。我们观察一下,发现这三行宽度基本一致。
由此我们可以考虑用网格布局(GridLayout),分为3行1列,每行装一个JPanel。JPanel默认为FlowLayout
布局,由此可以把信息和框分别装进JPanel。
亮代码:
/**
* @ Author_张斌
* Layout演示
*
* 1.定义组件
* 2.创建组件(构造函数)
* 3.添加组件
* 4.对窗体进行设置
* 5.显示窗口
*/
import javax.swing.*;
import javax.xml.stream.Location;
import java.awt.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.InputStreamReader;
public class Tests extends JFrame{
//定义组件
JPanel jp1,jp2,jp3;
JPasswordField jpw;
JLabel jl1,jl2;
JTextField jtf;
JButton jb1,jb2;
public static void main(String[] args){
Tests tests = new Tests();
}
public Tests(){
//创建组件
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jtf = new JTextField(10);
jpw = new JPasswordField(10);
jl1 = new JLabel("账号");
jl2 = new JLabel("密码");
jb1 = new JButton("登录");
jb2 = new JButton("退出");
//添加组件
jp1.add(jl1);
jp1.add(jtf);
jp2.add(jl2);
jp2.add(jpw);
jp3.add(jb1);
jp3.add(jb2);
//添加JPanel
this.add(jp1);
this.add(jp2);
this.add(jp3);
//添加布局管理器
this.setLayout(new GridLayout(3,1));
//设置窗体
this.setTitle("用户登录");
this.setSize(300,150);
this.setLocation(200,200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//禁止用户改变窗体大小
this.setResizable(false);
//显示窗体
this.setVisible(true);
}
}