我想显示数据库 JAVA Jframe 中的用户名

I want to present the username from database JAVA Jframe

我有两个 JFrame windows 一个用于登录,第二个用于欢迎。现在我想在欢迎屏幕中显示连接用户的 FirstnameLastname

我尝试了很多方法,但其中 none 行得通,所以我请求您的帮助。我刚开始学GUI:

登录密码:

import java.awt.EventQueue;
import java.sql.*;
import javax.swing.*;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Login {

    private JFrame frame;
    private JLabel MainLogo;
    String  Firstname=null; 
    String  Lastname=null;


    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Login window = new Login();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    Connection connected = null;
    private JTextField UsernameFiled;
    private JPasswordField passwordField;

    public Login() {
        initialize();

        connected = DBConnection.DBconnector();

    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 560, 256);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        JLabel lblNewLabel = new JLabel("UserName: ");
        lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 20));
        lblNewLabel.setBounds(160, 11, 140, 50);
        frame.getContentPane().add(lblNewLabel);

        JLabel lblPassword = new JLabel("PassWord: ");
        lblPassword.setFont(new Font("Tahoma", Font.BOLD, 20));
        lblPassword.setBounds(160, 72, 140, 40);
        frame.getContentPane().add(lblPassword);

        JButton Loginbtn = new JButton("Login");
        Loginbtn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                try {


                    String query = "Select * from Users where nickname=? and password=?";
                    PreparedStatement pst = connected.prepareStatement(query);
                    pst.setString(1, UsernameFiled.getText());
                    pst.setString(2, passwordField.getText());

                    ResultSet res = pst.executeQuery();
                    Firstname = res.getString("Firstname");
                    Lastname = res.getString("Lastname");
                    int c=0;

                    while(res.next()) {
                        c++;
                    }

                    if(c == 0) {
                        JOptionPane.showMessageDialog(null, "You didnt put any username or password!");
                    }
                    else if(c == 1) {
                        JOptionPane.showMessageDialog(null, "Hello to you, " + Firstname +" "+ Lastname);
                        frame.dispose();
                        UserPage UserFrame = new UserPage();
                        UserFrame.setVisible(true);

                    }else if( c > 1) {
                        JOptionPane.showMessageDialog(null, "Duplicate Username and Password");
                    }else {
                        JOptionPane.showMessageDialog(null, "Username and Password are inncorect...Try agian!");
                    }

                    pst.close();
                    res.close();

                }catch(Exception LoginError) {
                    JOptionPane.showMessageDialog(null, LoginError);

                }




            }
        });

        Loginbtn.setFont(new Font("Tahoma", Font.BOLD, 20));
        Loginbtn.setBounds(160, 148, 186, 40);
        frame.getContentPane().add(Loginbtn);

        UsernameFiled = new JTextField();
        UsernameFiled.setFont(new Font("Tahoma", Font.BOLD, 16));
        UsernameFiled.setBounds(310, 28, 186, 25);
        frame.getContentPane().add(UsernameFiled);
        UsernameFiled.setColumns(10);

        passwordField = new JPasswordField();
        passwordField.setFont(new Font("Tahoma", Font.BOLD, 16));
        passwordField.setBounds(310, 84, 186, 25);
        frame.getContentPane().add(passwordField);

        MainLogo = new JLabel("");
        Image imgs = new ImageIcon(this.getClass().getResource("/login.png")).getImage();
        MainLogo.setIcon(new ImageIcon(imgs));
        MainLogo.setBounds(10, 11, 128, 128);
        frame.getContentPane().add(MainLogo);
    }
}

欢迎密码:

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

import net.proteanit.sql.DbUtils;

import javax.swing.JLabel;
import javax.swing.JOptionPane;

import java.awt.Font;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import java.sql.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class UserPage extends JFrame {

    private JPanel contentPane;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    UserPage frame = new UserPage();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */

    Connection connected=null;
    private JTable table;

    public UserPage() {
        connected=DBConnection.DBPreconnector();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 576, 410);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JButton bntLoadData = new JButton("Show Users Data");
        bntLoadData.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {


                try {

                    String query = "Select ID,Age,Password,Firstname,Lastname from users";
                    PreparedStatement pst = connected.prepareStatement(query);

                    ResultSet res = pst.executeQuery();
                    table.setModel(DbUtils.resultSetToTableModel(res));


                } catch (Exception Error) {

                    Error.printStackTrace();
                }

            }
        });

        JLabel lblNewLabel = new JLabel("Hello,  "  + "The Username name");
        lblNewLabel.setFont(new Font("Tahoma", Font.BOLD, 18));
        lblNewLabel.setBounds(10, 11, 280, 19);
        contentPane.add(lblNewLabel);

        bntLoadData.setFont(new Font("Tahoma", Font.BOLD, 20));
        bntLoadData.setBounds(162, 102, 238, 23);
        contentPane.add(bntLoadData);

        table = new JTable();
        table.setBounds(28, 136, 508, 221);
        contentPane.add(table);
    }
}

在您的代码中,您似乎没有在欢迎界面加载登录用户的用户名或密码。您要么必须从登录框架传递它,要么必须重新查询数据库并获取名字和姓氏。

我建议,只需通过构造函数从欢迎屏幕传递名字和姓氏即可。

登录成功,只需在构造函数中传入名称: 登录代码添加:

                } else if(c == 1) {
                    JOptionPane.showMessageDialog(null, "Hello to you, " + Firstname +" "+ Lastname);
                    frame.dispose();
                    UserPage UserFrame = new UserPage( Firstname, Lastname );
                    UserFrame.setVisible(true);
                }

在欢迎框架中,添加一个构造函数来处理这个问题:

public UserPage(String loggedInFirstName, String loggedInLastName){
   // your remaining code
   JLabel lblNewLabel = new JLabel("Hello,  "  + loggedInFirstName + " " + loggedInLastName );
   // your remaining code.
}

这样的方法可能适合您的情况,如果适合您,请不要忘记将答案标记为已接受