文章目录
八、项目开发实现步骤
(十)创建应用程序类
- ● 创建应用程序类,存在全局数据,所有的窗口界面都可以共享应用程序类里存放的数据。
1、创建app子包
- 在net.liulixiang.student包里创建app子包
2、创建Application类
- 在net.liulixiang.student.app包里创建Application类
package net.liulixiang.student.app;
/**
* 功能:应用程序类,存放全局数据
* 作者:刘丽香
* 日期:2023年06月16日
*/
public class Application {
public static int id; // 登录用户标识符
public static String username; // 登录用户名
public static String password; // 登录用户密码
public static LoginFrame loginFrame; // 登录窗口
public static MainFrame mainFrame; // 主窗口
public static RegisterFrame registerFrame; // 注册窗口
}
- 此时,三个窗口界面类还未创建,因此程序会报错:无法解析符号。
- 在net.liulixiang.student根包里创建gui子包(gui: graphical user interface - 图形用户界面),在里面创建三个类:LoginFrame、MainFrame与RegisterFrame。
- 此时,Applicaiton类就不会报错了
(十一)创建窗口界面类
1、创建主界面窗口
(1)先来做一个空白的主界面窗口
-
继承JFrame类
-
添加构造方法(带标题参数的构造方法)
-
声明状态服务变量
-
创建初始化图形用户界面方法 - initGUI()
-
在构造方法里调用initGUI()方法
-
编写主方法,实例化主窗口
-
运行程序,查看结果,窗口启动时屏幕居中
-
单击主窗口关闭按钮,窗口是关闭了,但程序仍在运行
-
修改一下initGUI()方法
-
运行程序,查看结果
(2)退出时弹出消息框询问用户
- 如果希望单击关闭按钮后,弹出一个询问框,询问用户是否要退出系统,那么就不用采用上述方法,而应该采用注册窗口监听器的方法,通过编写事件处理方法来弹出询问对话框。
- 注册窗口监听器,创建窗口适配器,编写事件处理代码
- 运行程序,查看结果
2、创建用户登录窗口LoginFrame
- 继承JFrame,创建LoginFrame
- 创建初始化图形用户界面方法
- 添加单参构造方法
- 添加主方法,实例化用户登录窗口
- 运行程序,查看结果
- 空白的用户登录窗口,不能调整大小
- 声明用户登录窗口所需变量
- 实例化组件
- 将控件添加到小面板,然后将小面板添加到主面板
- 设置按钮热键字母,以及密码框的回显字符
- 运行程序,查看效果
- 行间距太大,界面显得不紧凑,怎么设置窗口属性,才能让界面紧凑好看呢?很简单,调用窗口的pack()方法即可。
- 运行程序,查看效果
- 单击【确定】按钮,或当焦点落在【确定】按钮时按回车键,都会调用登录方法login()。
- 编写用户登录方法login()
/**
* 登录方法
*/
private void login() {
// 获取用户名
username = txtUsername.getText().trim();
// 获取密码
password = new String(txtPassword.getPassword());
// 创建用户服务对象
UserService userService = new UserServiceImpl();
// 调用登录方法,返回登录用户对象
User user = userService.login(username, password);
// 判断登录用户是否为空,决定登录是否成功
if (user != null) {
// 隐藏登录窗口
Application.loginFrame.setVisible(false);
// 定义状态服务对象
StatusService statusService = new StatusServiceImpl();
// 获取状态对象
Status status = statusService.findStatusById(1);
// 保存登录用户的信息
Application.id = user.getId();
Application.username = user.getUsername();
Application.password = user.getPassword();
// 提示用户登录成功
JOptionPane.showMessageDialog(null,
"欢迎使用学生信息管理系统" + status.getVersion(),
"用户登录", JOptionPane.INFORMATION_MESSAGE);
// 显示系统主窗口
Application.mainFrame = new MainFrame("");
// 释放登录窗口
Application.loginFrame.dispose();
} else {
// 隐藏登录窗口
Application.loginFrame.setVisible(false);
// 提示用户登录失败,要重新输入用户名或密码
JOptionPane.showMessageDialog(null,
"用户名或密码错误,请重新输入!",
"用户登录", JOptionPane.ERROR_MESSAGE);
// 显示登录窗口
Application.loginFrame.setVisible(true);
// 用户名文本框内容全选
txtUsername.selectAll();
// 密码文本框内容全选
txtPassword.selectAll();
// 用户名文本框获取焦点
txtUsername.requestFocus();
}
-
运行程序,查看效果
-
输入用户名之后,敲回车让光标跳到密码文本框,就应该编写一个用户名文本框的按键事件
-
编写【密码】文本框按键事件处理代码(敲回车后执行登录方法)
-
编写【取消】按钮单击事件处理代码
-
编写【注册】按钮单击事件处理代码
-
此时,需要修改用户注册窗口RegisterFrame,继承JFrame,添加单参构造方法,初始化图形用户界面方法,主方法
运行程序,查看效果
- 再查看用户登录窗口【注册】按钮单击事件处理代码,就没有错误了。
- 运行程序,查看效果
- 登录窗口完整代码