Java编写窗口第二弹
基于JFrame窗口的,想要了解Web窗口的话,查看我下一篇文章
下面开始继续介绍JFrame窗口创建登陆注册界面。
接着上一篇文章所说,如何进行检测用户是否输入了正确的用户名与密码
(上一篇文章地址:点击这里)
其实很简单,就是给登陆按钮设置一个监听器,并且给监听器进行编写方法。
检测文本框TextField中是否还是提示内容。如果是就弹出错误框,提示用户名密码不能为空。不是,则进行数据库比对,如果数据正确,则提示登陆成功,监听器内方法如下:
login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jdbc d = new jdbc();
String na = text1.getText();
String ps = text2.getText();
if(e.getSource()==login) {
if(na.equals("请输入账号:")||ps.equals("请输入密码:")) {
JOptionPane.showMessageDialog(null, "用户名或密码不能为空");
}
if(d.compare(na,ps)) {
JOptionPane.showMessageDialog(null, "登陆成功");
f1.dispose();
}
}
}
});
此处运用了匿名类进行编写监听器方法体。
监听器中方法还可以单独出来,下面注册按钮的监听器我就单独写出来
监听器的方法体如下:
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jdbc d = new jdbc();
String na = name.getText();
String ps = pass.getText();
String pe = ph.getText();
String email = em.getText();
d.insert(na, ps,pe,email);
}
}
但是由于点击注册按钮后,我们需要生成一个注册面板,在注册面板中填写自己的信息,于是这个面板也需要同事发生,得到Regist.java的整体代码如下:
package com.main.frame;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Regist implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JFrame f2 = new JFrame();
f2.setTitle("欢迎注册!");
f2.setBounds(400,50,400,560);
Container conn = f2.getContentPane(); //生成一个容器
conn.setLayout(new GridLayout(7,1)); //设置容器布局
f2.invalidate();
f2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//实例化各控件
JPanel f2p1 = new JPanel();
JPanel f2p2 = new JPanel();
JPanel f2p3 = new JPanel();
JPanel f2p4 = new JPanel();
JPanel f2p5 = new JPanel();
JPanel f2p6 = new JPanel();
JPanel f2p7 = new JPanel();
JPanel f2p8 = new JPanel();
JLabel f2l1 = new JLabel("欢迎注册!");
JLabel f2l2 = new JLabel(" 账 号:");
JLabel f2l3 = new JLabel(" 密 码:");
JCheckBox f2c2 = new JCheckBox("显示密码");
JLabel f2l4 = new JLabel("确认密码:");
JCheckBox f2c1 = new JCheckBox("显示密码");
JLabel f2l5 = new JLabel(" 电 话:");
JLabel f2l6 = new JLabel("E-Mail:");
JLabel f2l7 = new JLabel("请选择你的身份:");
JButton f2b1 = new JButton("注册");
TextField f2j1 = new TextField(15);
TextField f2j2 = new TextField(15);
f2j2.setEchoChar('*');
TextField f2j3 = new TextField(15);
f2j3.setEchoChar('*');
TextField f2j4 = new TextField(15);
TextField f2j5 = new TextField(15);
String []js = {"学生","教师"};
JComboBox qx = new JComboBox(js);
qx.insertItemAt("请选择", 0);
qx.setSelectedIndex(0);
f2l1.setFont(new Font("宋体", Font.BOLD, 20));
f2p1.add(f2l1);
f2p2.add(f2l2);
f2p2.add(f2j1);
f2p3.add(f2l3);
f2p3.add(f2j2);
f2p3.add(f2c2);
f2p4.add(f2l4);
f2p4.add(f2j3);
f2p4.add(f2c1);
f2j3.addFocusListener(new jiance(f2j2,f2j3));
f2p5.add(f2l5);
f2p5.add(f2j4);
f2p6.add(f2l6);
f2p6.add(f2j5);
f2p7.add(f2l7);
f2p7.add(qx);
f2p7.add(f2b1);
f2b1.addActionListener(new re(f2j1,f2j2,f2j4,f2j5));
conn.add(f2p1);
conn.add(f2p2);
conn.add(f2p3);
conn.add(f2p4);
conn.add(f2p5);
conn.add(f2p6);
conn.add(f2p7);
f2.setVisible(true);
}
private class re implements ActionListener{
private TextField name;
private TextField pass;
private TextField ph;
private TextField em;
public re(TextField name,TextField pass,TextField ph,TextField em) {
this.name = name;
this.pass = pass;
this.ph = ph;
this.em = em;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jdbc d = new jdbc();
String na = name.getText();
String ps = pass.getText();
String pe = ph.getText();
String email = em.getText();
d.insert(na, ps,pe,email);
}
}
}
相信到这里大家都发现了,登陆与注册两个操作与数据库连接的两句关键性语句分别为 d.compare(na,ps)和d.insert(na,ps,pe,email);
而d是我jdbc方法初始化的一个对象。
jdbc代码如下:
package com.main.frame;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
public class jdbc {
Connection conn = null;
Statement stat = null;
ResultSet res = null;
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/exam";
String name = "root";
String passwd = "123456";
public jdbc() {
try {
Class.forName(driver).newInstance(); //????
conn = DriverManager.getConnection(url, name, passwd);
stat = conn.createStatement();
} catch (ClassNotFoundException e) {
// TODO: handle exception
System.out.println("找不到这个驱动!");
e.printStackTrace();
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//修改密码
public boolean updata(String username1,String oldpasswd,String newpasswd) {
boolean judge = false;
boolean s = compare(oldpasswd,newpasswd);
if(s) {
String sql = "updata user set password=\""+newpasswd+
"\"where username=\""+username1+"\"";
try {
int a = stat.executeUpdate(sql);
if(a==1) {
JOptionPane.showMessageDialog(null, "修改密码成功!");
judge = true;
}
conn.close();
stat.close();
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "该用户不存在!");
e.printStackTrace();
}
}
else {
JOptionPane.showMessageDialog(null, "修改失败!");
}
return judge;
}
//删除用户
public void delete(String username,String password) {
if(compare(username, password)) {
JOptionPane.showMessageDialog(null, "删除成功!");
}
else {
return;
}
String sql ="delete from user where username =\""+username+
"\"";
try {
int a = stat.executeUpdate(sql);
conn.close();
stat.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "该用户不存在!");
e.printStackTrace();
}
}
//添加用户,注册功能
public void insert(String username,String password,String phone,String Email) {
String sql = "insert into user(username,password,phone,Email) value(\""+
username+"\",\""+password+"\",\""+phone+"\",\""+Email+"\")";
try {
int a = stat.executeUpdate(sql);
conn.close();
stat.close();
if(a==1) {
JOptionPane.showMessageDialog(null, "注册成功!");
}
} catch (Exception e) {
// TODO: handle exception
JOptionPane.showMessageDialog(null, "对不起,该用户名已存在!");
e.printStackTrace();
}
}
public boolean compare(String name,String pass) {
boolean m = false;
String sql = "select password from user where username=\""+name+"\"";
try {
res = stat.executeQuery(sql); //输出单个结果集。
if(res.next()) { //????
String ps = res.getString(1); //???
if(ps.equals(pass)) {
m = true;
}
else {
JOptionPane.showMessageDialog(null, "密码错误!");
}
}else {
JOptionPane.showMessageDialog(null, "账户不存在!");
}
res.close();
conn.close();
stat.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return m;
}
}
这是登陆注册的灵魂所在,里面还存在着Update方法,可以用来编写修改密码等操作,我是因为时间有限没有进行编写修改密码操作,如果有需要,请留言,我会及时更新。