JavaSe基础---GUI设计

# GUI 设计

  • 1.Swing 工具包下有 MVC 结构,所谓 MVC 结构就是:模型 (数据)+ 视图 (界面)+ 控制 (监听事件)

  • 2.JFrame 窗体

    • 构造 JFrame 对象

    • 设定窗体宽高 setSize ()

    • 设定窗体可见 setVisible ()

    • 设定关闭方式 (根据情况设定)

    • setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)

  • DO_NOTHING_ON_CLOSE”、“DISPOSE_ON_CLOSE”、“HIDE_ON_CLOSE”、“EXIT_ON_CLOSE”。

    • 第一种表示什么也不做就将窗体关闭;
    • 第二种表示任何注册监听程序对象后会自动隐藏并释放窗体;
    • 第三种表示隐藏窗口的默认窗口关闭;
    • 第四种表示退出应用程序默认窗口关闭。
  • 3.Swing 包

    • 文本框 ----JTextField
    • 密码框 ----JPasswordField
    • 标签 ----JLable
    • 复选框 -----jCheckBox
    • 单选框 -----JRadioButton (同一组单选按钮必须先创建 ButtonGroup,然后把单选框组件放入到 ButtonGroup 中)

# 登录界面 Demo

# 一、思路

  • (1) 用到的窗体
    - 这次项目中使用的窗体为 JFrame,实现图形界面,首先必须有一个顶级窗体
  • (2) 使用到的标签
    - Jlabel 标签元素类,显示文字和图片
    - JTextField 文本输入框元素组件类,接收用户输入信息并将其显示
    - JPasswordField 密码输入框组件类,接收用户输入的信息,然后把每一个字符都用一个加密符号显示
    - JButton 按钮元素组件类,显示文字或图片,也可以一起显示,可以点击
  • (3) 使用到的布局
    - java.awt.FlowLayout 流式布局类
    - java.awt.Dimension 封装组件宽度和高度的类
  • 布局类是针对容器组件的,它会让添加到容器上的组件按照布局类的方式去排列对齐。
  • 如果我们没有设置窗体的布局,那么我们添加的组件就会出现覆盖的问题,最后只会显示最后添加的那个组件流式布局的效果类似于 word 文档,对组件按行进行排列,当前行满了再放到下一行。但是不能像 word 一样回车换行。

# 二、项目逻辑

  • 创建 JFrame 窗体
    • 1. 设置窗体文字
    • 2. 设置窗体大小
    • 3. 设置窗体大小不可调 (setResizable(false))
    • 4. 设置窗体相对于另一个窗体居中位置 (setLocationRelativeTo(null))
    • 5. 设置窗体关闭
    • 6. 设置窗体居中显示
  • 使用流式布局
    • 1. 创建流式布局对象并实例化
    • 2. 设置对齐方式为居中,组件间隔为 10 (视情况而定)
  • 设置除顶级窗体大小外,其他组件大小
    • Dimension(hight,weight)
  • 创建 JLabel 标签并添加到窗体
    • 1. 创建用户名和密码标签
    • 2. 添加到窗体
  • 创建 JTextField 和 JPasswordField 组件并添加到窗体
    • 1. 创建输入文本框和密码框对象
    • 2. 调用 setPreferredSize () 方法设置文本框和密码框大小
    • 3. 添加到窗体
  • 创建 JButton 组件并添加到窗体
    • 1. 创建登录和注册按钮标签
    • 2. 调用 setText () 方法在按钮上显示登录和注册
    • 3. 添加到窗体
  • 使窗体可显示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import javax.swing.*;
import java.awt.*;

public class Login extends Frame {
public void Jframe() {
//设定窗体容器
JFrame frame = new JFrame();
frame.setTitle("社团成员登录界面"); //容器文字
frame.setSize(350,120); //容器大小
frame.setResizable(false); // 设置禁止调整窗体大小
frame.setLocationRelativeTo(null);// 设置窗体相对于另一个组件的居中位置,
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //容器关闭
frame.setLocationRelativeTo(null); //居中显示

//使用流式布局,对齐方式居中,组件间隔为10
FlowLayout fl = new FlowLayout(FlowLayout.CENTER,10,10);
frame.setLayout(fl);

//Dimension 类封装单个对象中组件的宽度和高度(精确到整数)
Dimension dim1 = new Dimension(100,20);

//创建标签对象,该对象显示为用户名,并将其添加到窗体上
JLabel lbUser = new JLabel("用户名:");
frame.add(lbUser);
//创建用户名文本框
TextField text_name = new TextField();
text_name.setPreferredSize(dim1); //设置除顶级容器组件其他组件的大小
frame.add(text_name); //添加到容器

//创建标签对象,该对象显示为密码,并将其添加到窗体上
JLabel lbPass = new JLabel("密码:");
frame.add(lbPass);
//创建密码文本框
JPasswordField text_pass = new JPasswordField();
text_pass.setPreferredSize(dim1);
frame.add(text_pass); //!!!注意:这里必须是创建一个标签对应创建一个相应文本框

//设置登录注册按钮
JButton btn_Up = new JButton();
btn_Up.setText("登录"); //调用setText()方法在按钮上显示登录
frame.add(btn_Up);

JButton btn_Sign = new JButton();
btn_Sign.setText("注册"); //调用setText()方法在按钮上显示注册
frame.add(btn_Sign);

//使窗体可见
frame.setVisible(true);
}

public static void main(String[] args) {
new Login().Jframe();
}
}

# 参考链接:

  1. https://blog.51cto.com/javanew/1956117
  2. https://blog.51cto.com/javanew/1955440

JavaSe基础---GUI设计
https://rofgd.github.io/2020/05/16/JavaSe基础---GUI设计/
作者
ReadPond
发布于
2020年5月16日
许可协议