Java - 如果 JBDC 成功连接,则切换 Jframe

Posted

技术标签:

【中文标题】Java - 如果 JBDC 成功连接,则切换 Jframe【英文标题】:Java - Switch Jframes if JBDC makes a successful connection 【发布时间】: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 查看The Use of Multiple JFrames, Good/Bad Practice? 和How to Use CardLayout 以获得更好的想法 也可以考虑使用对话框...How to Make Dialogs 这些都是非常好的观点。登录屏幕是程序应该显示的第一件事。我认为拥有一个单独的 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 是一个具有数据库连接和登录检查方法的类

【讨论】:

以上是关于Java - 如果 JBDC 成功连接,则切换 Jframe的主要内容,如果未能解决你的问题,请参考以下文章

从 JSP 站点中选择条目,使用 SQL 和 JBDC 从数据库中删除条目

JBDC在IDEA下连接SQL数据库

在 AWS EMR 上设置 Spark Thrift 服务器以建立 JBDC/ODBC 连接

idea可以连接小皮数据库嘛

java连接数据库

H2 控制台无法访问 jbdc 数据库