java - Java中如何显示登录后的用户名?

标签 java netbeans authentication

当用户成功登录时,我想在欢迎jFrame上的jLabel中显示用户名。我正在使用Netbeans做这个项目,使用的DBMS是MySQL。基本上我创建了两个jFrames

一个为login.java,另一个为welcome.javajLabel 放置在 welcome.java 中,变量名称初始化为 jLabel_UnameDisplay

这是我的要求和项目总代码的图片说明:

Requirement

login.java

public class login extends javax.swing.JFrame {

public login() {
    initComponents();
}

@SuppressWarnings("unchecked")                    
private void initComponents() {

    jPanel = new javax.swing.JPanel();
    jLabel_uname = new javax.swing.JLabel();
    jLabel_pass = new javax.swing.JLabel();
    txt_uname = new javax.swing.JTextField();
    txt_pass = new javax.swing.JPasswordField();
    jButton_login = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

    jPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

    jLabel_uname.setText("User Name");
    jPanel.add(jLabel_uname, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 110, 100, 40));

    jLabel_pass.setText("Password");
    jPanel.add(jLabel_pass, new org.netbeans.lib.awtextra.AbsoluteConstraints(70, 170, 100, 40));
    jPanel.add(txt_uname, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 110, 160, 40));
    jPanel.add(txt_pass, new org.netbeans.lib.awtextra.AbsoluteConstraints(170, 170, 160, 40));

    jButton_login.setText("Login");
    jButton_login.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton_loginActionPerformed(evt);
        }
    });

    jPanel.add(jButton_login, new org.netbeans.lib.awtextra.AbsoluteConstraints(180, 230, 90, 40));

    getContentPane().add(jPanel, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, 400, 300));

    pack();
}                      

private void jButton_loginActionPerformed(java.awt.event.ActionEvent evt) {                                              
     if (txt_uname.getText().equals("admin")&&txt_pass.getText().equals("1234")){
        new welcome().setVisible(true);
        this.dispose();

    }else{
        try {
        Connection c;
        Class.forName("com.mysql.jdbc.Driver");
        c=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","123");

        Statement s=c.createStatement();
            ResultSet rs= s.executeQuery("SELECT * FROM user WHERE status='1'");

            while (rs.next()) {                    
                String unmae=rs.getString("username");
                String pass=rs.getString("password");

                if(unmae.equals(txtuname.getText()) && pass.equals(txtpass.getText())){
                    new welcome().setVisible(true);
                    this.dispose();
                }


            }

        } catch (Exception ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(rootPane, "Check Your Username or Password","Error",JOptionPane.ERROR_MESSAGE);
        }

    }
}                                             


public static void main(String args[]) {

    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new login().setVisible(true);
        }
    });
}

private javax.swing.JButton jButton_login;
private javax.swing.JLabel jLabel_pass;
private javax.swing.JLabel jLabel_uname;
private javax.swing.JPanel jPanel;
private javax.swing.JPasswordField txt_pass;
private javax.swing.JTextField txt_uname;

}

welcome.java

public class welcome extends javax.swing.JFrame {

public welcome() {
    initComponents();
}

@SuppressWarnings("unchecked")

private void initComponents() {

    jPanel = new javax.swing.JPanel();
    jLabel_UnameDisplay = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jPanel.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

    jLabel_UnameDisplay.setBackground(new java.awt.Color(102, 255, 102));
    jLabel_UnameDisplay.setOpaque(true);
    jPanel.add(jLabel_UnameDisplay, new org.netbeans.lib.awtextra.AbsoluteConstraints(93, 69, 199, 126));

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 400, Short.MAX_VALUE)
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGap(0, 300, Short.MAX_VALUE)
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );

    pack();
}                   


public static void main(String args[]) {

    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(welcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(welcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(welcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(welcome.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }

    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new welcome().setVisible(true);
        }
    });
}

private javax.swing.JLabel jLabel_UnameDisplay;
private javax.swing.JPanel jPanel;

}

最佳答案

您可以采用多种方法来实现此目的,但您的目标是将登录框架与欢迎框架分离,这样显示一个框架的决定就不会由另一个框架做出。

你可以

使用某种观察者/委托(delegate)/监听器,当用户正确通过身份验证时会收到通知,并将用户信息传递给它。然后,它有责任决定下一步做什么,在此显示欢迎 View ,并向其传递用户信息(作为示例)

这是 Swing 中的常见概念

你可以

使用某种对话框(而不是 JFrame),它允许代码在对话框可见时阻塞,并在对话框关闭时继续。

在这种情况下,您需要提供某种 getter 来获取用户详细信息(如果用户由于某种原因取消了对话框,则为 null),然后您就可以创建一个根据结果​​决定做什么

看看How to use dialogs了解更多详情。

无论如何,您都需要能够将登录 View 中的信息传递到欢迎 View ,手段通常很常见,利用setter和getter以及基本方法调用。

关于java - Java中如何显示登录后的用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41604004/

相关文章:

java - 将 Shiro 的 PasswordMatcher 与自定义领域一起使用

java - 具有子模块时未部署主 pom.xml

安卓 : authentication to php server application

java - 如何将 java.util.logging 重定向到文件?

php - Netbeans xdebug 噩梦

mysql - java.sql.SQLSyntaxErrorException : You have an error in your SQL syntax;

java - 如何使用 Mac 在 netbeans 中打开 .txt 文件?

node.js - Passport.authenticate() 使用 Promise 而不是自定义回调

ruby-on-rails - Rails 3. 使用复选框在一列中显示多个值

java - 哪些 HTTP header 对于 GAE doPost/doGet 方法是绝对必需的?