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 从数据库中删除条目