文章目录
八、项目开发实现步骤
(十)创建应用程序类
- 创建窗口界面类
1、创建app子包
- 在
net.zhong.student
根包里创建app
子包
2、创建Application类
-
在
net.zhong.student.app
包里创建Application
类
-
此时在
net.zhong.student
根包里创建gui
子包(gui: graphical)
(十一)创建窗口界面类
1、创建主界面窗口
- 我们先来做一个空白的主界面窗口
- 继承JFrame类
- 在net.zhong.student.gui包包里已经创建三个类LoginFrame、RegisterFrame和MainFrame
2、创建主界面窗口MainFrame
- MainFrame继承JFrame类
- 添加构造方法(有一个标题参数的构造方法)
- 在类的声明部分声明两个变量:状态服务变量与状态变量
- 创建初始化图形用户界面方法initGUI()
- 在构造方法里调用初始化图形用户界面方法initGUI()
- 编写主方法代码,实例化主窗口,设置空标题,保存到Application的变量mainFrame里
- 如果希望单击关闭按钮后,弹出一个询问框,询问用户是否要退出系统,那么就不用采用上述方法,而应该采用注册窗口监听器的方法,通过编写事件处理方法来弹出询问对话框。
- 运行程序,查看结果
3、创建用户登录窗口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,添加单参构造方法,初始化图形用户界面方法,主方法
-
再查看用户登录窗口【注册】按钮单击事件处理代码,就没有错误了。
-
运行程序,查看效果
-
登录窗口完整代码
3、创建用户注册窗口RegisterFrame
- 在创建用户登录窗口过程中,已经创建了一个可以显示与关闭的空白注册窗口
- 单参构造方法
- 初始化图形用户界面方法
- 主方法
- 声明变量
- 创建组件(面板与控件)
- 将控件添加到四个小面板
- 置大面板布局,将四个小面板添加到大面板
- 设置窗口刚好容纳组件
- 在initGUI()方法里编写【提交】按钮事件处理代码
- 编写注册方法register()
private void register() {
// 获取用户名
username = txtUsername.getText().trim();
// 获取密码
password = new String(txtPassword.getPassword());
// 获取电话
telephone = txtTelephone.getText().trim();
// 定义当前时间为注册时间
registerTime = new Timestamp(System.currentTimeMillis());
// 对用户名进行非空校验
if (username.equals("")) {
JOptionPane.showMessageDialog(null, "用户名不能为空!",
"学生信息管理系统", JOptionPane.WARNING_MESSAGE);
txtUsername.requestFocus();
return;
}
// 对密码进行非空校验
if (password.equals("")) {
JOptionPane.showMessageDialog(null, "密码不能为空!",
"学生信息管理系统", JOptionPane.WARNING_MESSAGE);
txtPassword.requestFocus();
return;
}
// 定义用户服务对象
UserService userService = new UserServiceImpl();
// 创建用户
User user = new User();
user.setUsername(username);
user.setPassword(password);
user.setTelephone(telephone);
user.setRegisterTime(registerTime);
// 添加用户
int count = userService.addUser(user);
// 判断是否添加成功
if (count > 0) {
setVisible(false);
JOptionPane.showMessageDialog(null, "恭喜!注册成功!",
"学生信息管理系统", JOptionPane.INFORMATION_MESSAGE);
setVisible(true);
} else {
JOptionPane.showMessageDialog(null, "遗憾!注册失败!",
"学生信息管理系统", JOptionPane.INFORMATION_MESSAGE);
}
}
- 在initGUI()方法里编写【取消】按钮单击事件处理代码
- 在initGUI()方法里编写【登录】按钮单击事件处理代码
- 在initGUI()方法里编写【用户名】文本框按键事件处理代码
- 在initGUI()方法里编写【密码】文本框按键事件处理代码
- 在initGUI()方法里编写【电话】文本框按键事件处理代码
- 先启动登录窗口,单击【注册】按钮,跳转到注册窗口,注册一个新用户,然后以新用户登录系统。
- 利用注册窗口,我们注册一个名叫“无心剑”的新用户,然后利用“无心剑”登录系统,测试取得成功。
- 注册窗口完整代码
程序改进建议
注意注册窗口程序存在不完善之处:用户名和密码为空时也能注册成功。为了让注册窗口程序更加完善,同学们自行修改实训讲义给出的参考代码,针对上述情况给用户弹出相应的警告消息,保证用户名与密码非空时才能注册新用户(非空校验)。
4、创建设置学校信息窗口SetCollegeInfoFrame
- 在net.zhong.student.gui包里创建SetCollegeInfoFrame类