Обменная переменная между двумя jFrames - PullRequest
0 голосов
/ 24 апреля 2011

У меня есть 3 Java-файла. DBConn - этот класс подключается к базе данных и выполняет запрос.

UserLogin - этот jFrame будет принимать имя пользователя и пароль и сравнивать с таблицей "users" если он совпадает, в Java-файле LibSysMain будет отображаться «Login Successfull»

LibSysMain - это основной файл, который показывает меню. Это jFrame, который отображается первым при запуске приложения.

Проблема в том, что я не могу установить сообщение «Вход успешен» в LibSysMain.

Моя база данных - MS Access. Название таблицы - «пользователи». Поле «имя пользователя» и «пароль». Оба они имеют строковый тип.

Помощь будет высоко ценится.

Я новичок в Java. Я использую NetBeans 6.9.1. Вот список:

DBConn:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package LibSystem;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;

/**
 *
 * @author Administrator
 */
public class DBConn {

    Connection con;
    Statement stmt;
    ResultSet rs;


    public void DoConnect(String querydb)
    {
        String SQL;
        SQL=querydb;

        try
        {
            // CONNECT TO THE DATABASE
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\Database\\libsys\\libsys.mdb";

            con = DriverManager.getConnection(url);
            System.out.println("\nConnected to the database");

            //QUERY THE DATABASE
            stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
            //String SQL ="Select * from Members";
            rs=stmt.executeQuery(SQL);

            //MOVE CURSOR AT FIRST RECORD AND FETCH DATA
            rs.next();
        }
        catch(ClassNotFoundException e)
        {
             System.out.println("\nClass not found. Check Path");
             e.printStackTrace();
        }
        catch (SQLException err)
        {
            JOptionPane.showMessageDialog(null, err.getMessage());
        }
    }

}

UserLogin:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * UserLogin.java
 *
 * Created on Apr 23, 2011, 8:46:59 PM
 */

package LibSystem;
import java.sql.*;
import javax.swing.JOptionPane;
import java.lang.*;


/**
 *
 * @author Administrator
 */
public class UserLogin extends javax.swing.JFrame {

    private String user;
    private String password;
    private String status;

    /** Creates new form UserLogin */
    public UserLogin() {
        initComponents();
    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        txtUserName = new javax.swing.JTextField();
        txtPassword = new javax.swing.JTextField();
        btnClose = new javax.swing.JButton();
        btnLogin = new javax.swing.JButton();
        lbUserName = new javax.swing.JLabel();
        lbPassword = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        btnClose.setText("Close");
        btnClose.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCloseActionPerformed(evt);
            }
        });

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

        lbUserName.setText("User Name");

        lbPassword.setText("Password");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(34, 34, 34)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lbPassword)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 134, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(layout.createSequentialGroup()
                            .addComponent(lbUserName)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 128, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(btnClose)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 64, Short.MAX_VALUE)
                                .addComponent(btnLogin))
                            .addComponent(txtUserName, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(txtPassword, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE))))
                .addGap(35, 35, 35))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(26, 26, 26)
                .addComponent(lbUserName)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtUserName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(lbPassword)
                .addGap(5, 5, 5)
                .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnClose)
                    .addComponent(btnLogin))
                .addContainerGap(39, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:

        //CREATE AN INSTANCE OF DBCONN CLASS TO CONNECT TO THE DATABASE
        //WE TAKE THE USERNAME FROM THE LOGIN WINDOW AND SEARCH THE USER
        //BASED ON THAT USER. IF FOUND, COMPARE IT WITH THE LOGIN WINDOW.
        //IF NOT FOUND DISPLAY ERROR MESSAGE.

        DBConn dbc = new DBConn();
        String qry = "Select * from users where username=" + "'" + txtUserName.getText() + "'";
        dbc.DoConnect(qry);

        try
        {
            setUsername(dbc.rs.getString("username"));
            setPassword(dbc.rs.getString("password"));

            //TEST PRINTOUT OF USERNAME AND PASSWORD FOR DEBUGGING
            System.out.println(getUsername());
            System.out.println(getPassword());

           if (user.equals(txtUserName.getText()) && password.equals(txtPassword.getText()))
            {
                JOptionPane.showMessageDialog(UserLogin.this, "Login Successfull");
                this.setStatus("pass");
                dispose();
            }
            else
            {
               JOptionPane.showMessageDialog(UserLogin.this, "Login unsuccessful");
               setStatus("fail");
            }


        }
        catch  (SQLException err)
        {
               JOptionPane.showMessageDialog(UserLogin.this, err.getMessage());
        }

    }                                        

    private void btnCloseActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
           this.dispose();
    }                                        

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UserLogin().setVisible(true);
            }
        });
    }

    public void setUsername(String u)
    {
        user = u;
    }

     public void setPassword(String p)
    {
        password = p;
    }


    public String getUsername()
    {
        return user;
    }

     public String getPassword()
    {
        return password;
    }

     public void setStatus(String stat)
    {
        status = stat;
    }

     public String getStatus()
    {
        return status;
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton btnClose;
    private javax.swing.JButton btnLogin;
    private javax.swing.JLabel lbPassword;
    private javax.swing.JLabel lbUserName;
    private javax.swing.JTextField txtPassword;
    private javax.swing.JTextField txtUserName;
    // End of variables declaration                   

}

LibSysMain:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * LibsysMain.java
 *
 * Created on Apr 23, 2011, 6:48:18 PM
 */

package LibSystem;

import javax.swing.JOptionPane;

/**
 *
 * @author Administrator
 */
public class LibsysMain extends javax.swing.JFrame {

   String q;

    /** Creates new form LibsysMain */
    public LibsysMain()
    {
        initComponents();
        //DBConn dbc = new DBConn();
        //q="Select * from users";
        //dbc.DoConnect(q);
    }

//        LibsysMain frame1 = new LibsysMain();
//        UserLogin frame2 = new UserLogin(frame1);

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel2 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jSeparator1 = new javax.swing.JSeparator();
        jMenuBar1 = new javax.swing.JMenuBar();
        miLogin = new javax.swing.JMenu();
        jMenuItem1 = new javax.swing.JMenuItem();
        jMenuItem2 = new javax.swing.JMenuItem();

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 100, Short.MAX_VALUE)
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowActivated(java.awt.event.WindowEvent evt) {
                formWindowActivated(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 539, Short.MAX_VALUE)
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 328, Short.MAX_VALUE)
        );

        jLabel1.setText("Status");

        javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
        jPanel3.setLayout(jPanel3Layout);
        jPanel3Layout.setHorizontalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel3Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addContainerGap(518, Short.MAX_VALUE))
        );
        jPanel3Layout.setVerticalGroup(
            jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 25, Short.MAX_VALUE)
        );

        jSeparator1.setAlignmentX(0.0F);
        jSeparator1.setMinimumSize(new java.awt.Dimension(10, 10));

        miLogin.setText("Connect");
        miLogin.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                miLoginActionPerformed(evt);
            }
        });

        jMenuItem1.setText("Login");
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
        miLogin.add(jMenuItem1);

        jMenuItem2.setText("Exit");
        jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem2ActionPerformed(evt);
            }
        });
        miLogin.add(jMenuItem2);

        jMenuBar1.add(miLogin);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 559, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(4, 4, 4)
                .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>                        

    private void miLoginActionPerformed(java.awt.event.ActionEvent evt) {                                        
        // TODO add your handling code here:

    }                                       

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
        UserLogin ul = new UserLogin();
        ul.setVisible(true);

        //SET THE STATUS IF LOGIN IS SUCCESSFULL
        if (ul.getStatus() == "pass")
        {
            jLabel1.setText("Logged In");
        }
        else
        {
            jLabel1.setText("Cannot Log in");
        }
    }                                          

    private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        // TODO add your handling code here:
        System.exit(0);
    }                                          

    private void formWindowActivated(java.awt.event.WindowEvent evt) {                                     
        // TODO add your handling code here:

    }                                    

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new LibsysMain().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JLabel jLabel1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem jMenuItem1;
    private javax.swing.JMenuItem jMenuItem2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JMenu miLogin;
    // End of variables declaration                   

}

1 Ответ

0 голосов
/ 24 апреля 2011

У меня есть пара предложений:

  • Во-первых, не сравнивайте строки с ==, как здесь if (ul.getStatus () == "pass") , поскольку это проверяет, ссылаются ли две переменные на одну и ту же строку объект (который вас не волнует), но лучше использовать метод equals или equalsIgnoreCase, который проверяет, содержат ли две строки одинаковые данные String (о которых вы заботитесь). например, if (ul.getStatus (). equalsIgnoreCase ("pass"))
  • Обязательно выполняйте все ваши запросы к базе данных и тому подобное в фоновом потоке к потоку графического интерфейса, EDT, например, можно достичь с помощью объекта SwingWorker. Эта статья расскажет вам, что я сказал, но даст вам детали: Параллельность в Swing .
  • Подумайте об использовании одного JFrame и модальных диалогов, чтобы они работали в качестве диалоговых окон основного приложения. Это может быть достигнуто с помощью JOptionPanes или модальных JDialogs, в частности, для вашего окна UserLogin.
  • По этой причине мне нравится ориентировать мой графический интерфейс на создание JPanels, а не окон верхнего уровня, таких как JFrames. Таким образом, я могу разместить свой GUI / JPanel в любом желаемом окне, в зависимости от ситуации, будь то JFrame, JApplet, JDialog, JOptionPane или даже вложенное в другой JPanel. Это дает вам удивительную гибкость.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...