天天看点

使用Java JFrame编写一个简单的登陆界面(二)

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方法,可以用来编写修改密码等操作,我是因为时间有限没有进行编写修改密码操作,如果有需要,请留言,我会及时更新。