文章目录
- 八 项目实训
- 10 创建应用程序类
- 11 创建窗口界面类
- 1编写主界面窗口,添加构造方法(有一个标题参数的构造方法)
- 2在类的声明部分声明两个变量:状态服务变量与状态变量
- 3,创建初始化图形用户界面方法initGUI()
- 4,在构造方法里调用初始化图形用户界面方法initGUI()
- 5,编写主方法代码,实例化主窗口,设置空标题,保存到Application的变量mainFrame里
- 6,如果希望单击关闭按钮后,弹出一个询问框,询问用户是否要退出系统,那么就不用采用上述方法,而应该采用注册窗口监听器的方法,通过编写事件处理方法来弹出询问对话框。
- 7, 继承JFrame,创建LoginFrame
- 8,创建初始化图形用户界面方法
- 9, 添加单参构造方法
- 10 添加主方法,实例化用户登录窗口
- 11 声明用户登录窗口所需变量
- 12单击【确定】按钮,或当焦点落在【确定】按钮时按回车键,都会调用登录方法login()。
- 13编写用户登录方法login()
- 14输入用户名之后,敲回车让光标跳到密码文本框,就应该编写一个用户名文本框的按键事件。
- 编写【取消】按钮单击事件处理代码
- 编写【注册】按钮单击事件处理代码
八 项目实训
10 创建应用程序类
- 创建应用程序类,存在全局数据,所有的窗口界面都可以共享应用程序类里存放的数据。
1,创建app包
1, 在net.zhao.student包里创建app子包
2,在net.zhao.student.app包里创建Application类
3, 在net.zhao.student.创建包gui包在创建三个类
- 查看应用程序类
11 创建窗口界面类
- 目前只是创建一个可以显示出来和关闭的主界面窗口,等到将各个功能模块窗口界面都完成了,我们会修改代码,给出主窗口界面的最终版。
1编写主界面窗口,添加构造方法(有一个标题参数的构造方法)
2在类的声明部分声明两个变量:状态服务变量与状态变量
3,创建初始化图形用户界面方法initGUI()
public void initGuI(){
statusService=new StatusServiceImpl();
status=statusService.findStatusByID(1);
setSize(800,640);
setVisible(true);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
4,在构造方法里调用初始化图形用户界面方法initGUI()
5,编写主方法代码,实例化主窗口,设置空标题,保存到Application的变量mainFrame里
public static void main(String[] args) {
AppLication.mainFrame=new MainFrame("");
}
6,如果希望单击关闭按钮后,弹出一个询问框,询问用户是否要退出系统,那么就不用采用上述方法,而应该采用注册窗口监听器的方法,通过编写事件处理方法来弹出询问对话框。
setTitle("学生信息管理系统"+status.getVersion());
//设置窗口默认关闭方式
// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addWindowListener(new WindowAdapter() {
//注册窗口监控器
@Override
public void windowClosing(WindowEvent e) {
exitSystem();
}
});
}
/**
* 退出系统
*/
private void exitSystem() {
}
- 运行程序,查看结果
7, 继承JFrame,创建LoginFrame
8,创建初始化图形用户界面方法
9, 添加单参构造方法
10 添加主方法,实例化用户登录窗口
- 运行程序,查看结果
11 声明用户登录窗口所需变量
private String username;
private String password;
private JLabel IbUsername;
private JLabel IbPassword;
private JTextField textUsername;
private JPasswordField txtPassword;
private JButton btnOK;
private JButton btCancel;
private JButton btRegister;
private JPanel panel,panel1,panel2,panel3;
12单击【确定】按钮,或当焦点落在【确定】按钮时按回车键,都会调用登录方法login()。
-
13编写用户登录方法login()
private void login() {
// 获取用户名
username = textUsername.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);
// 用户名文本框内容全选
textUsername.selectAll();
// 密码文本框内容全选
txtPassword.selectAll();
// 用户名文本框获取焦点
textUsername.requestFocus();
}
}
14输入用户名之后,敲回车让光标跳到密码文本框,就应该编写一个用户名文本框的按键事件。
textUsername.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER){
txtPassword.requestFocus();
}
}
});
- 编写【密码】文本框按键事件处理代码(敲回车后执行登录方法)
编写【取消】按钮单击事件处理代码
txtPassword.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_ENTER);
login();
}
});
编写【注册】按钮单击事件处理代码
btnRegister.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
AppLication.loginFrame.setVisible(false);
AppLication.registerFrame=new RegisterFrame("用户注册");
}
});
- 此时,需要修改用户注册窗口RegisterFrame,继承JFrame,添加单参构造方法,初始化图形用户界面方法,主方法
public class RegisterFrame extends JFrame {
public RegisterFrame(String title){
super(title);
initGuI();
}
private void initGuI(){
setSize(250,200);
setLocationRelativeTo(null);
setResizable(false);
setTitle("用户注册");
setVisible(true);
//
addWindowListener(new WindowAdapter() {
@Override
public void windowOpened(WindowEvent e) {
dispose();
AppLication.loginFrame.setVisible(true);
}
});
}
public static void main(String[] args) {
AppLication.registerFrame=new RegisterFrame("用户注册");
}
}
- 再查看用户登录窗口【注册】按钮单击事件处理代码,就没有错误了。
- 运行程序,查看效果