一、创建一个简易窗体UI并实现监听的步骤
1.创建一个窗体对象
2.设置窗体对象的属性和功能
3.设置窗体的布局格式
4.创建组件对象(包括按钮、输入框等)
5.设置组件对象的属性和内容(包括尺寸、颜色、字体等)
6.给窗体添加组件
代码详解——以创建一个学生管理系统登录界面为例
这里需要用到下面这两个包进行开发
- java.awt
- javax.swing
package com.example.zyf0923;
import javax.swing.*;
import java.awt.*;
public class StuUI{
// 声明一个方法 写开发界面的代码
public void initUI(){
JFrame jf = new JFrame ();
jf.setTitle ("学生管理系统");
jf.setSize (500,600);
jf.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);// 关闭时退出进程
// 设置布局 FlowLayout
jf.setLayout (new FlowLayout());
// 创建组件对象
// 标签 输入框 按钮
JLabel idLab = new JLabel ();
JLabel pwdLab = new JLabel ();
JTextField idIn = new JTextField ();
JPasswordField pwdIn = new JPasswordField ();
JButton btnLogin = new JButton ();
JButton btnRegist = new JButton ();
// 设置组件的属性 以及内容
idLab.setText ("学号:");
pwdLab.setText ("密码:");
btnLogin.setText("登录");
btnRegist.setText ("注册");
//字体
Font font = new Font ("黑体", Font.BOLD, 20);
idLab.setFont (font);
pwdLab.setFont (font);
btnLogin.setFont (font);
btnRegist.setFont (font);
idIn.setFont(font);
// pwdIn.setFont (font);
// 尺寸
Dimension dim = new Dimension (390,35);
idIn.setPreferredSize (dim);
pwdIn.setPreferredSize (dim);
// 窗体添加组件
jf.add (idLab);
jf.add (idIn);
jf.add (pwdLab);
jf.add (pwdIn);
jf.add (btnLogin);
jf.add (btnRegist);
jf.setVisible (true);// 可视化
}
public static void main(String[] args){
// StuUI stuUi = new StuUI();
// stuUi.initUI ();
new StuUI().initUI ();
}
}
二、创建一个动作监听器(ActionListener)实现对按钮的监听加载
1.创建一个类implements ActionListener
2.重写ActionListener中的方法
这里面的ActionEvent: 动作事件 事件记录信息对象
- 记录动作发生时的相关数据,打包对象传入响应方法
- 通过事件对象可以调用事件发生时的数据, 比如 : 被点击按钮上的字
3: 将写好的监听模块类 在按钮所在的位置创建一个对象
4:调用按钮自带的注册监听的方法 添加监听对象
创建一个动作监听器的代码:
package com.example.zyf0923;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class StuListener implements ActionListener{
public void actionPerformed(ActionEvent e){
// 写抽象方法的 具体实现
// 写点击按钮之后具体要执行的代码
String actionStr = e.getActionCommand ();
System.out.println (actionStr+"被点击了!!");
}
}
// 按钮所在类/方法(在StuUI中)
// 监听加载
StuListener stul = new StuListener ();
btnLogin.addActionListener (stul);
btnRegist.addActionListener(stul);
三、完成监听加载后创建好学生类并实现登录注册以及学生保存
StuUI类:
package com.zsj0927;
import javax.swing.*;
import java.awt.*;
// 创建一个学生管理系统UI类
public class StuUI {
//使用构造方法
public void initUI(){
//创建学生管理系统的登录窗体
JFrame jfLogin = new JFrame(); //创建一个登录窗体
jfLogin.setTitle("学生管理系统"); //设置窗体标题
jfLogin.setSize(500,600); //设置窗体宽度和高度
jfLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭窗口机制
//设置窗体的布局
jfLogin.setLayout(new FlowLayout()); //设置布局为流式布局
//创建组件对象
JLabel idLab = new JLabel(); //创建账号标签
JLabel pwdLab = new JLabel(); //创建密码标签
JTextField idIn = new JTextField(); //创建账号输入框
JPasswordField pwdIn = new JPasswordField(); //创建密码输入框
JButton btnLogin = new JButton(); //创建登录按钮
JButton btnRejist = new JButton(); //创建注册按钮
//设置组件的属性和内容
idLab.setText("学号"); //设置账号标签内容为“学号“
pwdLab.setText("密码"); //设置密码标签内容为“密码”
btnLogin.setText("登录"); //设置登录按钮内容为”登录“
btnRejist.setText("注册"); //设置注册按钮cu内容为”注册“
Font font = new Font("粗体",Font.BOLD,20); //创建一个字体对象
idLab.setFont(font); //设置账号标签内容字体为上面创建的字体
pwdLab.setFont(font); //设置密码标签内容字体为上面创建的字体
btnLogin.setFont(font); //设置登录按钮内容字体为上面创建的字体
btnRejist.setFont(font); //设置注册按钮内容字体为上面创建的字体
Dimension dim = new Dimension(400,40); //创建一个尺寸对象
idIn.setPreferredSize(dim); //设置账号输入框的尺寸为上面创建的尺寸
pwdIn.setPreferredSize(dim); //设置密码输入框的尺寸为上面创建的尺寸
//给窗体添加组件
jfLogin.add(idLab);
jfLogin.add(idIn);
jfLogin.add(pwdLab);
jfLogin.add(pwdIn);
jfLogin.add(btnLogin);
jfLogin.add(btnRejist);
//窗体可视化
jfLogin.setVisible(true);
//监听加载
StuListener stul = new StuListener();
btnLogin.addActionListener(stul);
btnRejist.addActionListener(stul);
//将界面上输入框的地址传送给监听器对象使用,用来在点击按钮时获取文本框内的文本
stul.idIn = idIn;
stul.pwdIn = pwdIn;
stul.jflogin = jfLogin;
}
public static void main(String[] args){
new StuUI().initUI ();
}
}
Student类
package com.zsj0927;
import javax.swing.*;
import java.awt.*;
public class Student {String stu_id;
String stu_pwd;
boolean isOnline = false;
// 构造方法
public Student(String stu_id,String stu_pwd) {
this.stu_id = stu_id;
this.stu_pwd = stu_pwd;
}
}
StuListener类
package com.zsj0927;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class StuListener implements ActionListener{
public JFrame jflogin;
// 定义输入框对象变量名
JTextField idIn =null;
JPasswordField pwdIn=null;
//创建一个存储用户对象(学生)的列表
ArrayList<Student> stuList = new ArrayList<>();
public static void main(String[] args) {
File file = new File("D:\\java实验文件\\学生.txt");
try {
file.createNewFile();
Writer out = new FileWriter(file);
out.write("用户名存储\n");
for (int i = 0; i < 100; i++) {
Student stu=new Student("admin"+i,"admin123"+i);
out.append(stu.stu_id+" "+stu.stu_pwd+"\n");
}
out.flush();
out.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
JFrame jfOperate;
//改写ActionListener中的函数
public void actionPerformed(ActionEvent e){
//将抽象方法进行具体实现
// 点击按钮后具体执行项
String actionStr = e.getActionCommand();
System.out.println(actionStr+"被点击了!");
//获取文本框中的字符串
String stu_id = idIn.getText();
String stu_pwd = pwdIn.getText();
System.out.println("stu_id:"+stu_id+"\n密码:"+stu_pwd);
//如果点击登录
if(actionStr.equals("登录")){
//首先验证用户是否存在
for(int i = 0; i < stuList.size();i++){
Student getstu = stuList.get(i);
if (getstu.stu_id.equals(stu_id)){
if(getstu.stu_pwd.equals(stu_pwd)){
getstu.isOnline = true;
JOptionPane.showMessageDialog(null,"登录成功!");
jflogin.setVisible(false);
jfOperate = new JFrame();
jfOperate.setTitle("学生个人中心"); //设置窗体标题
jfOperate.setSize(500,600); //设置窗体宽度和高度
jfOperate.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭窗口机制
//设置窗体的布局
jfOperate.setLayout(new FlowLayout()); //设置布局为流式布局
//创建一个注销按钮组件
JButton btnCancell = new JButton();
//添加组件
jfOperate.add(btnCancell);
//设置组件内容
btnCancell.setText("注销");
//设置字体
btnCancell.setFont(new Font("粗体",Font.BOLD,20));
//监听加载
// StuListener stul = new StuListener();
btnCancell.addActionListener(this);
//窗体可视化
jfOperate.setVisible(true);
}
return;
}
}
// 弹窗
JOptionPane.showMessageDialog (null,
"该用户不存在,请先注册!");
}
//如果点击注册
else if(actionStr.equals("注册")){
//首先验证用户是否存在
for(int i = 0; i < stuList.size();i++){
Student getstu = stuList.get(i);
if(getstu.stu_id.equals(stu_id)){
//弹窗
JOptionPane.showMessageDialog(null,"该用户以及存在,请直接登录");
return;
}
}
Student stu = new Student(stu_id,stu_pwd);
stuList.add(stu);
System.out.println("恭喜注册成功,您是第"+stuList.size()+"位用户!");
JOptionPane.showMessageDialog(null,"恭喜注册成功,您是第"+stuList.size()+"位用户");
}else if(actionStr.equals("注销")){
jfOperate.setVisible(false);
jflogin.setVisible(true);
}
}
}