我们先分析一下:
用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);
-
}
-
}