java - 触发 Action 后从 JFrame 返回

标签 java swing jframe return joptionpane

我正在使用 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/

相关文章:

java - 如何在Java中为MVC模型实现undo/redo?

java - 单击下一个按钮时显示下一个问题

java - 使用 ServerSocket 的 SWING 应用程序

java - 在数据更改时刷新 Jframe

java - 为什么编译器允许我将一个实现类转换为另一个实现类?

java - 新行的正则表达式匹配

java - 当用户单击 JTextField 时如何显示“打开文件”对话框?

java - 如何在 HashMap 中找到平均桶长度?

java - 消除 jframe 之间不必要的焦点变化

Java - 带对话框打印文档?