【问题标题】:Java - Switch Jframes if JBDC makes a successful connectionJava - 如果 JBDC 成功连接,则切换 Jframe
【发布时间】:2014-09-18 03:46:24
【问题描述】:

如果连接尝试成功与否,我还没有找到返回的方法。我希望用户登录一个 Jframe,如果成功,则切换到另一个 Jframe。我提供了到目前为止的代码。欢迎任何有助于解决此问题的信息。提前致谢。

private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
    try {
        // TODO add your handling code here:
        ConnectDatabase connect = new ConnectDatabase();
        String output = new String(passwordField.getPassword());
        connect.getDBConnection(usernameField.getText(),output);
        //this.dispose();
        //Main main = new Main();
        //main.setVisible(true);
    } catch (Exception ex) {
        Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
        errorLabel.setText("Incorrect username/password");
    }
}  

【问题讨论】:

  • 不要切换 JFrames,使用 CardLayout 切换 JFrame.pack() 的 JPanel
  • 也可以考虑使用对话框...How to Make Dialogs
  • 这些都是非常好的观点。登录屏幕是程序应该显示的第一件事。我认为拥有一个单独的 JFrame 是正确的想法,但我可能错了。
  • 就我个人而言,我会让主应用程序出现。如果它检测到有可用的连接,它将打开登录对话框。但是您可以先显示登录对话框。在出现登录对话框之前,用户可以放心地看到应用程序启动,但这只是我

标签: java swing jdbc jframe


【解决方案1】:

如果连接尝试成功与否,我还没有找到返回的方法。我希望用户登录一个 Jframe,如果成功,则切换到另一个 Jframe

我认为你解决问题的方式不对……

首先,请参阅 The Use of Multiple JFrames, Good/Bad Practice?

从您的主 UI 中,您应该向用户呈现某种模式对话框。这将提示用户提供连接详细信息,并且当他们选择“连接”(或您拥有的任何按钮)时,将尝试创建连接。

如果连接失败,它将向用户显示错误消息并等待(不关闭对话框,因此用户可以重试)。

如果成功,您将关闭对话框并允许调用者从对话框中检索详细信息。

更多详情请见How to Make Dialogs

另一个想法可能是使用CardLayout。您将提供一个“登录”或“连接”面板,一旦建立连接,您就可以将屏幕切换到接下来的任何内容。

详情请见How to Use CardLayout

【讨论】:

    【解决方案2】:

    试试这个:

       try{
          //connection statements
        }catch(Exception e){
          //control come here if connection fails.
          // you can do your work in this block.(The work which you want to do after connection failure)
        }
    

    【讨论】:

      【解决方案3】:

      以下代码可能对您有所帮助

      import java.awt.Color;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import javax.swing.ImageIcon;
      import javax.swing.JButton;
      import javax.swing.JFrame;
      import javax.swing.JLabel;
      import javax.swing.JOptionPane;
      import javax.swing.JPanel;
      import javax.swing.JPasswordField;
      import javax.swing.JTextField;
      
      
      public class Login extends JFrame implements ActionListener{
      
      JTextField t1_uname; 
      JPasswordField t2_pswd;
      JButton btn_lgn,btn_clr;
      public Login()
      {
             setLayout(null); 
             setTitle("LOGIN");
             setSize(830,720);
             setLocation(300,8);
      
             JPanel p1=new JPanel();
             p1.setLayout(null);
             p1.setBounds(0,0,830,720);
             p1.setBackground(Color.white);
             add(p1);
      
             JLabel l1=new JLabel("USERNAME :");
             l1.setBounds(140,230,130,20);
             p1.add(l1);
      
             t1_uname=new JTextField();
             t1_uname.setBounds(250,230,130,20);
             p1.add(t1_uname);
      
             JLabel l2=new JLabel("PASSWORD :");
             l2.setBounds(140,270,130,20);
             p1.add(l2);
      
             t2_pswd=new JPasswordField();
             t2_pswd.setBounds(250,270,130,20);
             p1.add(t2_pswd);
      
             btn_lgn=new JButton("LOGIN");
             btn_lgn.setBounds(250,310,100,20);
             btn_lgn.addActionListener(this);
             p1.add(btn_lgn);
      
             btn_clr=new JButton("CLEAR");
             btn_clr.setBounds(360,310,100,20);
             btn_clr.addActionListener(this);
             p1.add(btn_clr);
      
             JLabel background=new JLabel(new ImageIcon("images/hd_login.jpg"));
             background.setBounds(130,80,830,720);
             p1.add(background);
      
             setVisible(true);
      
       }
        public static void main(String[] args) {
          Login obj=new Login();
       }  
      
      @Override
      public void actionPerformed(ActionEvent e) {
          if(e.getSource()==btn_lgn)
          {
              String uname=t1_uname.getText();
              String pswd=t2_pswd.getText();
              Dbconnection obj=new Dbconnection();
              int k=obj.loginCheck(uname, pswd);
              if(k==1)
              {
                  AdminHome obj_AdminHome=new AdminHome();
                  setVisible(false);
              }
              else
              {
                  JOptionPane.showMessageDialog(null,"WRONG USERNAMR OR PASSWORD");
              }
      
      
          }
          else if(e.getSource()==btn_clr)
          {
              t1_uname.setText("");
             t2_pswd.setText("");
          }
         }
       }
      

      DbConnection 中的方法,这只是一个方法,你必须创建与数据库的连接,

       import java.sql.*;
       import java.util.*;
       public class Dbconnection {
      
      Connection con=null;
      PreparedStatement ps=null;
      ResultSet rs=null;
      
      public Dbconnection()
      {
          try{
      
                  Class.forName("com.mysql.jdbc.Driver");
                       con=DriverManager.getConnection("jdbc:mysql://localhost:3306/DBNAME","root","root");   
              }
              catch(Exception e)
              {
                  System.out.println("Error in connection"+e);
              }
      }
      
      
           public int loginCheck(String username,String password)
        {
            int flag=0;
            try{
                ps=con.prepareStatement("select * from tbl_login where username=? and password=? ");
                  ps.setString(1,username);
                  ps.setString(2,password);
      
                  rs=ps.executeQuery();
                  while(rs.next())
                  {
                      flag=1;
                  }
      
            }
            catch(Exception e)
            {
                System.out.println("Error in loginCheck"+e);
            }
            return flag;
        }
       }
      

      这里,AdminHome 页面是新的 JFrame,你必须创建,所有组件在 AdminHome 类的 CONSTRUCTOR 中创建,因此,创建该类的对象将显示 JFrame 及其组件

      Dbconnection 是一个具有数据库连接和登录检查方法的类

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-15
        • 1970-01-01
        • 1970-01-01
        • 2016-10-22
        • 2015-09-04
        • 1970-01-01
        相关资源
        最近更新 更多