今天写的是最后一个登陆界面的修整,登陆界面是非常重要的,关系到前面我们写的代码是否都能够全部运行起来。
首先打开上次创建的LoginFrame类
创建构造方法
初始化构造方法
<Alt+Enter>获取 private void initGUI() {}
编写主方法(放在最后)
声明变量
实例化组件
将控件添加到小面板
设置主面板三行一列的网络布局
将三个小面板添加到主面板
设置按钮热键字母及密码框回显字符
设置窗口属性
编写login()登录方法
编写事件处理代码
按钮及文本框单击事件
登录界面是整个程序最重要的一部分,所以必须要确保不能因为自己的粗心而打错或者打漏某些代码,其次整个程序设计里面也只有登录界面能够带动其他的界面一起运行,达到我们想要的效果。
运行结果如下:
完整代码如下:
package net.qf.student.gui;
import net.qf.student.app.Application;
import net.qf.student.bean.User;
import net.qf.student.service.StatusService;
import net.qf.student.service.UserService;
import net.qf.student.service.impl.StatusServiceImpl;
import net.qf.student.service.impl.UserServiceImpl;
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;
/**
-
功能:登陆窗口
-
作者:秦芳
-
日期:2019.6.20
*/
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;//主面板
/**
-
1.构造方法
-
@param title
/
public LoginFrame(String title) {
super(title);
// 调用初始化界面方法
initGUI();
}
/* -
2.初始化用户界面
*/
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_O);
btnCancel.setMnemonic(KeyEvent.VK_C);
btnRegister.setMnemonic(KeyEvent.VK_R);
//设置密码框回显字符
txtPassword.setEchoChar(’*’);// 3.第三步
// 设置窗口大小
setSize(250, 200);
// 设置窗口屏幕居中
setLocationRelativeTo(null);
// 设置窗口不可调整大小
setResizable(false);
// 设置窗口恰好容纳组件,使窗口内容紧凑
pack();
// 设置窗口可见
setVisible(true);
// 设置窗口默认关闭操作
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/*
- 注册监听器,实现监听器接口,编写事件处理代码
*/
// 确定按钮单击事件
btnOK.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
login();
}
});
// [确定]按钮按键事件处理
btnOK.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
login();
}
}
});// 取消按钮单击事件
btnCancel.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});// 注册按钮单击事件
btnRegister.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// 隐藏登录窗口
Application.loginFrame.setVisible(false);
// 实例化注册窗口
Application.registerFrame = new RegisterFrame(“注册”);
}
});// 用户名文本框按键事件
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();
}
}
});
} - 注册监听器,实现监听器接口,编写事件处理代码
/**
-
登录方法
*/
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();
// 保存登录用户的信息
Application.id = user.getId();
Application.username = user.getUsernname();
Application.password=user.getPassword();
// 提示用户登录成功
JOptionPane.showMessageDialog(null,
“欢迎使用学生信息管理系统” +
statusService.findStatusById(1).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();
}
}
/**
- 主方法
- @param args
*/
public static void main(String[] args) {
// 设置应用程序登录窗口
Application.loginFrame = new LoginFrame(“用户登录”); //以便前面设置窗口可以不用再设置标题
}
}
-