功能目录
- 数据库连接
- 通过Swing类创建窗口
- 对窗口中按钮进行监听
- 事件处理
- 完整代码(可直接用)
前言
此次仅是实现模拟QQ的登录功能,注册用户和登录之后的部分暂未上传
一、数据库连接
1.先通过Navicat for MySQL创建一个用户表,储存用户个人信息。
随便录入几个用户信息
2.数据库连接代码(JDBC技术)
代码如下(示例):
Connection connection;
Statement statement;
ResultSet rs;
String Url = "jdbc:mysql://localhost:3306/user?useSSl=true&useUnicode=true&characterEncoding=UTF-8";
String User = "root";
String Pass = "admin";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException f) {
System.out.println("SQLException:" + f.getLocalizedMessage());
}
二、通过Swing类创建窗口
private final JFrame app;
private final JPanel JPanel1, JPanel2, JPanel3;
private final JButton JButton_Enter, JButton_Cancel;
private final JLabel JLabel_UserName, JLabel_UserPassword;
private final JTextField jTextField;
private final JPasswordField jPasswordField;
public LoginUI() {
app = new JFrame("登陆界面实现");
//将图标换成指定图片
app.setIconImage(new ImageIcon("src/image1.jpeg").getImage());
//设置窗体所在位置及大小
app.setLocation(648, 312);
app.setSize(300, 300);
app.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置布局
Container c = app.getContentPane();
c.setLayout(new GridLayout(4, 1));
JPanel1 = new JPanel();
JPanel2 = new JPanel();
JPanel3 = new JPanel();
//添加组件以及事件监听
JLabel_UserName = new JLabel("用户名:");
JPanel1.add(JLabel_UserName);
jTextField = new JTextField(10);
JPanel1.add(jTextField);
JLabel_UserPassword = new JLabel(" 密码:");
JPanel2.add(JLabel_UserPassword);
jPasswordField = new JPasswordField(10);
JPanel2.add(jPasswordField);
JButton_Enter = new JButton("登录");
JPanel3.add(JButton_Enter);
JButton_Enter.addActionListener(this);
JButton_Cancel = new JButton("取消");
JPanel3.add(JButton_Cancel);
JButton_Cancel.addActionListener(this);
c.add(JPanel1);
c.add(JPanel2);
c.add(JPanel3);
app.setResizable(false);
app.setVisible(true);
}
窗口界面如下:
三、对登录和取消这两个按钮进行监听
JButton_Enter.addActionListener(this);
JButton_Cancel.addActionListener(this);
四、进行事件处理
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == JButton_Enter) {
Connection connection;
Statement statement;
ResultSet rs;
String Url = "jdbc:mysql://localhost:3306/user?useSSl=true&useUnicode=true&characterEncoding=UTF-8";
String User = "root";
String Pass = "admin";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException f) {
System.out.println("SQLException:" + f.getLocalizedMessage());
}
try {
connection = DriverManager.getConnection(Url, User, Pass);
statement = connection.createStatement();
rs = statement.executeQuery("select * from user");
while (rs.next()) {
String st1 = rs.getString("id");
String st2 = rs.getString("password");
char[] ps = jPasswordField.getPassword();
StringBuilder st3 = new StringBuilder();
for (char p : ps) {
st3.append(p);
}
if (jTextField.getText().equals(st1) && ((st3.toString()).equals(st2))) {
message = 1;
JOptionPane.showMessageDialog(app,"登陆成功","系统提示",JOptionPane.INFORMATION_MESSAGE);
rs.close();
statement.close();
connection.close();
}
}
if (message == 0) {
JOptionPane.showMessageDialog(app, "您输入的账号或密码有误,请重新输入", "系统提示", JOptionPane.ERROR_MESSAGE);
}
connection.close();
} catch (SQLException f) {
System.out.println("SQLException" + f.getMessage());
}
}
if (e.getSource() == JButton_Cancel) {
jTextField.setText("");
jPasswordField.setText("");
}
}
}
五、完整代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
public class LoginUI implements ActionListener {
private final JFrame app;
private final JPanel JPanel1, JPanel2, JPanel3;
private final JButton JButton_Enter, JButton_Cancel;
private final JLabel JLabel_UserName, JLabel_UserPassword;
private final JTextField jTextField;
private final JPasswordField jPasswordField;
private int message = 0;
public LoginUI() {
app = new JFrame("登陆界面实现");
//将图标换成指定图片
app.setIconImage(new ImageIcon("src/image1.jpeg").getImage());
//设置窗体所在位置及大小
app.setLocation(648, 312);
app.setSize(300, 300);
app.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置布局
Container c = app.getContentPane();
c.setLayout(new GridLayout(4, 1));
JPanel1 = new JPanel();
JPanel2 = new JPanel();
JPanel3 = new JPanel();
//添加组件以及事件监听
JLabel_UserName = new JLabel("用户名:");
JPanel1.add(JLabel_UserName);
jTextField = new JTextField(10);
JPanel1.add(jTextField);
JLabel_UserPassword = new JLabel(" 密码:");
JPanel2.add(JLabel_UserPassword);
jPasswordField = new JPasswordField(10);
JPanel2.add(jPasswordField);
JButton_Enter = new JButton("登录");
JPanel3.add(JButton_Enter);
JButton_Enter.addActionListener(this);
JButton_Cancel = new JButton("取消");
JPanel3.add(JButton_Cancel);
JButton_Cancel.addActionListener(this);
c.add(JPanel1);
c.add(JPanel2);
c.add(JPanel3);
app.setResizable(false);
app.setVisible(true);
}
public static void main(String[] args) {
new LoginUI();
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == JButton_Enter) {
Connection connection;
Statement statement;
ResultSet rs;
String Url = "jdbc:mysql://localhost:3306/user?useSSl=true&useUnicode=true&characterEncoding=UTF-8";
String User = "root";
String Pass = "admin";
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException f) {
System.out.println("SQLException:" + f.getLocalizedMessage());
}
try {
connection = DriverManager.getConnection(Url, User, Pass);
statement = connection.createStatement();
rs = statement.executeQuery("select * from user");
while (rs.next()) {
String st1 = rs.getString("id");
String st2 = rs.getString("password");
char[] ps = jPasswordField.getPassword();
StringBuilder st3 = new StringBuilder();
for (char p : ps) {
st3.append(p);
}
if (jTextField.getText().equals(st1) && ((st3.toString()).equals(st2))) {
message = 1;
JOptionPane.showMessageDialog(app,"登陆成功","系统提示",JOptionPane.INFORMATION_MESSAGE);
rs.close();
statement.close();
connection.close();
}
}
if (message == 0) {
JOptionPane.showMessageDialog(app, "您输入的账号或密码有误,请重新输入", "系统提示", JOptionPane.ERROR_MESSAGE);
}
connection.close();
} catch (SQLException f) {
System.out.println("SQLException" + f.getMessage());
}
}
if (e.getSource() == JButton_Cancel) {
jTextField.setText("");
jPasswordField.setText("");
}
}
}
总结
仅仅是简单的实现了一下这个界面,而且只有数据库中有这个用户名时才能进行判断是否能登录,实现注册功能暂未上传。