我正在使用 Java Swing 开发我的第一个 GUI 程序。我有一个登录表单类,它读取用户名和密码,然后检查本地数据库中是否存在匹配的用户名/密码组合。如果存在,我希望能够将用户名从 JFrame 对象返回到我的主类。这只有在我点击登录按钮触发操作后才会发生。
我不知道如何让这个类在特定时间后返回:
public class Login extends JFrame {
//declaration of components
private JTextField userText = new JTextField(12);
private JPasswordField passText = new JPasswordField(12);
//declaration of variables
String username;
String password;
//...
class loginAction extends AbstractAction{
loginAction(){
super("Login");
putValue(SHORT_DESCRIPTION, "Click to login");
}
public void actionPerformed(ActionEvent e){
userLogin();
}
}
public String userLogin(){
String sql = "SELECT * from Employees " +
"WHERE Username = ? AND Password = ?";
try(PreparedStatement ps = con.prepareStatement(sql)){
ps.setString(1, userText.getText());
ps.setString(2, new String(passText.getPassword()));
ResultSet rs = ps.executeQuery();
if(rs.next())
//RETURN USERNAME BACK TO MAIN CLASS...How?
else
JOptionPane.showMessageDialog(this, "Incorrect username or password.", "", JOptionPane.ERROR_MESSAGE);
}
catch (SQLException e) {
utils.Print.print(e.getMessage());
printSuppressed(e);
}
finally{
}
}
//...
Login(Connection connect){
///...
JButton login = new JButton(new loginAction())
//...
}
最佳答案
不要为此使用 JFrame,因为这是创建 JDialogs 和 JOptionPanes 等模式对话框的目的。这就是他们存在的理由,如果你不用他们,他们会很伤心。说真的,你知道当你调用 JOptionPane 时会发生什么,调用程序的代码流如何停止并等待 JOptionPane 在继续之前返回,这就是模态 JDialogs 所做的(事实上 JOptionPane 只是 JDialog 的一个变体),而这正是您想要的行为。
请注意,无论您是否使用 JFrame,您几乎都不应拥有扩展 JFrame 的类。而是将您的代码用于创建 JPanel,然后将它们填充到 JDialog、JFrames 或您想要显示它们时所需的任何容器中。
关于java - 触发 Action 后从 JFrame 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13716052/