今天进入了GUI的编写,每一个代码都的可见性变得非常强烈,能出来效果让我的兴趣突然高涨了起来。
一、编写应用程序类 存放全局变量
/*
功能:应用程序类
存放全局变量
作者:宋云鹏
时间:2019年6月20日14:46:30
*/
package net.syp.student.app;
import net.syp.student.gui.LoginFrame;
import net.syp.student.gui.MainFrame;
import net.syp.student.gui.RegisterFram;
public class Application {
//登录用户标识符
public static int id;
//登录用户名
public static String username;
//登录用户密码
public static String password;
//登录窗口
public static LoginFrame loginFram;
//主窗口
public static MainFrame mainFrame;
//注册窗口
public static RegisterFram registerFram;
}
二、编写窗口界面类
/*
功能:登录窗口
作者:宋云鹏
时间:2019年6月20日15:45:29
*/
package net.syp.student.gui;
import net.syp.student.app.Application;
import net.syp.student.bean.Status;
import net.syp.student.bean.User;
import net.syp.student.service.Impl.StatusServiceImpl;
import net.syp.student.service.Impl.UserServiceImpl;
import net.syp.student.service.StatusService;
import net.syp.student.service.UserService;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class LoginFrame extends JFrame {
private String username;
private String password;
private JLabel lblUsername;
private JLabel lblPassword;
private JTextField txtUsername;
private JPasswordField txtPassword;
private JButton btnOK;
private JButton btnCancel;
private JButton btnRegister;
private JPanel panel,panel1,panel2,panel3;
public LoginFrame(String title){
super(title);
initGUI();
}
private void initGUI(){
//实例化组件(面板与控件)
panel = (JPanel) getContentPane();
panel1 = new JPanel();
panel2 = new JPanel();
panel3 = new JPanel();
lblUsername = new JLabel("用户名:");
lblPassword = new JLabel("密 码:");
txtUsername = new JTextField(15);
txtPassword = new JPasswordField(15);
btnOK = new JButton("确定[O]");
btnCancel = new JButton("取消[C]");
btnRegister = new JButton("注册[R]");
//将控件添加到三个小面板
panel1.add(lblUsername);
panel1.add(txtUsername);
panel2.add(lblPassword);
panel2.add(txtPassword);
panel3.add(btnOK);
panel3.add(btnCancel);
panel3.add(btnRegister);
//设置主面板为三行一列的网格布局
panel.setLayout(new GridLayout(3,1));
//将三个小面板依次添加到主面板
panel.add(panel1);
panel.add(panel2);
panel.add(panel3);
//设置按键热键字母
btnOK.setMnemonic(KeyEvent.VK_0);
btnCancel.setMnemonic(KeyEvent.VK_C);
btnRegister.setMnemonic(KeyEvent.VK_R);
//设置密码框回显字符
txtPassword.setEchoChar('*');
//窗口大小
setSize(300,200);
//屏幕居中
setLocationRelativeTo(null);
//窗口不可调整大小
setResizable(false);
//窗口可见
setVisible(true);
//窗口默认关闭操作
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口刚好容纳组件
pack();
//[确定]按钮单击事件处理
btnOK.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
login();
}
});
//[确定]按钮按键事件处理
btnOK.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
//按下回车键,调用登录方法
if (e.getKeyCode() == KeyEvent.VK_ENTER){
login();
}
}
});
//[用户名]文本框按键事件处理
txtUsername.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();
}
}
});
//[取消]按钮单击事件处理
btnCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
//[注册]按钮单击事件处理
btnRegister.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//隐藏登录窗口
Application.loginFram.setVisible(false);
//创建注册窗口
Application.registerFram = new RegisterFram("用户注册");
}
});
}
//登录方法
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.loginFram.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.loginFram.dispose();
}else {
//隐藏登录窗口
Application.loginFram.setVisible(false);
//提示用户登录失败,要重新输入用户名或密码
JOptionPane.showMessageDialog(null,"用户名或密码错误,请重新输入!","用户登录",JOptionPane.ERROR_MESSAGE);
//显示登录窗口
Application.loginFram.setVisible(true);
//用户名文本框内容全选
txtUsername.selectAll();
//密码文本框内容全选
txtPassword.selectAll();
//用户名文本框获取焦点
txtUsername.requestFocus();
}
}
public static void main(String[] args) {
Application.loginFram = new LoginFrame("用户登录");
}
}
得到效果:
在今天的实训学习中,我对GUI的操作变得更加熟悉,今天操作没有出现较大的错误,基本顺风顺水,而且看到的效果比较明显,先比前几天来说,不在那么的枯燥无味。