首页 > 文章列表 > Java如何实现简单登陆界面

Java如何实现简单登陆界面

java
457 2023-04-27

Java如何实现简单登陆界面

1、首先需要建立一个类,在这里,我命名为newLogin

newLogin类的代码如下

package p4;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import javax.swing.ButtonGroup;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPasswordField;

import javax.swing.JRadioButton;

import javax.swing.JTextField;

public class newLogin extends JFrame implements ActionListener{

    private static final long serialVersionUID = 1L;

    private Connection con = null;

    private Statement statement = null;

    private ResultSet res = null;

    private ButtonGroup buttongroup = new ButtonGroup();

    private MyPanel jp = new MyPanel();

    private JLabel ul = new JLabel("用户名:");

    private JLabel pl = new JLabel("密    码:");

    private JLabel ts = new JLabel("");

    private JTextField uname = new JTextField();

    private JPasswordField pword = new JPasswordField();

    private JRadioButton[] butArray = {

            new JRadioButton("学生",true),

            new JRadioButton("教师")

    };

    private JButton login = new JButton("登陆");

    private JButton reset = new JButton("重置");

    public newLogin() {

        addListener();

        initialFrame();

    }

    private void initialFrame() {

        Font font = new Font("宋体",Font.BOLD,12);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setTitle("登陆");

        jp.setLayout(null);

        ul.setBounds(100, 30, 60, 30);

        jp.add(ul);

        uname.setBounds(170, 30, 140, 30);

        jp.add(uname);

        pl.setBounds(100, 80, 60, 30);

        pword.setBounds(170, 80, 140, 30);

        jp.add(pl);

        jp.add(pword);

        ts.setBounds(100, 160, 200, 50);

        jp.add(ts);

        ts.setFont(font);

        login.setBounds(100, 220, 70, 30);

        jp.add(login);

        login.setFont(font);

        reset.setBounds(220, 220, 70, 30);

        jp.add(reset);

        reset.setFont(font);

        add(jp);

        setResizable(false);

        buttongroup.add(butArray[0]);

        buttongroup.add(butArray[1]);

        butArray[0].setBounds(120, 130, 100, 50);

        jp.add(butArray[0]);

        butArray[1].setBounds(220, 130, 100, 50);

        jp.add(butArray[1]);

        butArray[0].setContentAreaFilled(false);

        butArray[1].setContentAreaFilled(false);

        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

        int centerX = screenSize.width/2;

        int centerY = screenSize.height/2;

        int w = 427;

        int h = 331;

        setBounds(centerX-w/2, centerY-h/2, w, h);

        setVisible(true);

        uname.requestFocus(true);

        getContentPane().add(jp);

        jp.getRootPane().setDefaultButton(login);

    }

    private void addListener() {

        this.login.addActionListener(this);

        this.uname.addActionListener(this);

        this.pword.addActionListener(this);

    }

    @Override

    public void actionPerformed(ActionEvent e) {

        if(e.getSource() == uname) {

            pword.requestFocus();

        }

        if(e.getSource() == pword) {

            butArray[0].requestFocus();

        }

        if(e.getSource() == butArray[0]||e.getSource() == butArray[1]||e.getSource() == login) {

//            this.ts.setText("正在为您努力加载,请稍等......");

            

            int type = this.butArray[0].isSelected()?0:1;

            String username = this.uname.getText().trim();

            char[] p = this.pword.getPassword();

            String password = String.valueOf(p).trim();

            if(username.equals("")) {

                JOptionPane.showMessageDialog(this, "请输入用户名!","错误",JOptionPane.ERROR_MESSAGE);

                ts.setText("");

                return ;

            }

            if(password.equals("")) {

                JOptionPane.showMessageDialog(this, "请输入密码!","错误",JOptionPane.ERROR_MESSAGE);

                ts.setText("");

                return ;

            }

            try {

                con = new connection().getConnection();  //调用自己写的一个数据库连接类

                statement = con.createStatement();

                if(type == 0) {

                    String sql = "select * from stuuser where "+

                        "username_stu='"+username+"'and password_stu='"+password+"'";

                    res = statement.executeQuery(sql);

                    if(res.next()) {

                        JOptionPane.showMessageDialog(this, "登录成功!","提示",JOptionPane.INFORMATION_MESSAGE);

                        this.dispose();

                    }

                    else {

                        JOptionPane.showMessageDialog(this, "用户名或密码错误!","错误",JOptionPane.ERROR_MESSAGE);

                        ts.setText("");

                        uname.setText("");

                        pword.setText("");

                    }

                    //关闭数据库连接

                    if(res != null) {

                        res.close();

                    }

                    if(statement != null) {

                        statement.close();

                    }

                    if(con != null) {

                        con.close();

                    }

                }

                else {

                    String sql = "select * from teauser where "+

                            "username_tea='"+username+"'and password_tea='"+password+"'";

                        res = statement.executeQuery(sql);

                        if(res.next()) {

                            String spec_name = res.getString(1);

                            JOptionPane.showMessageDialog(this, "登录成功!","提示",JOptionPane.INFORMATION_MESSAGE);

                            this.dispose();

                        }

                        else {

                            JOptionPane.showMessageDialog(this, "用户名或密码错误!","错误",JOptionPane.ERROR_MESSAGE);

                            ts.setText("");

                            uname.setText("");

                            pword.setText("");

                        }

                        //关闭数据库连接

                        if(res != null) {

                            res.close();

                        }

                        if(statement != null) {

                            statement.close();

                        }

                        if(con != null) {

                            con.close();

                        }

                }

            }catch(SQLException ea) {

                ea.printStackTrace();

            }

        }

        else if(e.getSource() == reset) {

            uname.setText("");

            pword.setText("");

        }

    }

}

2、编写数据库连接类,在这里命名为connection,然后在类里写一个获取连接的放回,并返回一个连接。

connection类的代码如下:

package p4;



import java.sql.Connection;

import java.sql.DriverManager;

//import java.sql.ResultSet;

import java.sql.SQLException;

//import java.sql.Statement;



public class connection {

    private Connection con = null;

//    private Statement statement = null;

//    private ResultSet res = null;

    String driver = "com.mysql.cj.jdbc.Driver";

    String url  = "jdbc:mysql://localhost:3306/Stu_manager?serverTimezone=Asia/Shanghai";

    String name = "root";

    String passwd = "123456";

    public connection() {

        

    }

    public Connection getConnection() {

        try{

            Class.forName(driver).newInstance();

            con = DriverManager.getConnection(url,name,passwd);

            }catch(ClassNotFoundException e){

                System.out.println("对不起,找不到这个Driver");

                e.printStackTrace();

            }catch(SQLException e){

                

                e.printStackTrace();

            }catch(Exception e){

                e.printStackTrace();

            }

        return con;

    }

}

3、在MySQL数据库中需建立两个用户表,分别用来存储不同用户的登陆账号和密码,这里学生用户表为stuuser,教师用户表为teauser,建表的SQL语句如下:

stuuser表:

create table stuuser(

    username_stu varchar(20) primary key,

    password_stu char(20) not null,

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

teauser表:

create table teauser(

    username_tea varchar(20) primary key,

    password_tea char(20) not null,

)ENGINE=InnoDB DEFAULT CHARSET=utf8;