获取登录用户 JavaFX 和 MySQL

2024-03-25

我正在开发我的项目,其中有用户界面,用户必须在登录阶段的文本字段中输入用户名和密码,这会将他移至下一个阶段,我想知道当前登录的是哪个用户。这两个阶段有单独的控制器。我尝试在登录阶段创建 setter 和 getter,将用户设置为他在用户名文本字段中输入的用户名,并从下一阶段获取它。

简化的登录屏幕:

private String currentUser;
public void setCurrentUser(String currentUser)
    {
        this.currentUser = currentUser;
    }

    public String getCurrentUser()
    {
        return currentUser;
    }

public void validateLogin() {
        DatabaseConnection connectNow = new DatabaseConnection();
        Connection connectDB = connectNow.getConnection();

        String verifyLogin = "SELECT count(1) FROM table WHERE username = '" + usernameTextField.getText() + "' AND password = '" + enterPasswordField.getText() + "'";
        
         try {
            Statement statement = connectDB.createStatement();
            ResultSet queryResult = statement.executeQuery(verifyLogin);

            while (queryResult.next()) {
                if (queryResult.getInt(1) == 1) {
                    setCurrentUser(usernameTextField.getText());
                    openScreen();
                } else {
                    loginMessageLabel.setText("No such user");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            e.getCause();
        }

当我在成功登录后进入的阶段运行此方法时,它返回 null:

System.out.println(userController.getCurrentUser());

有什么方法可以让它这样工作吗? 抱歉解释不好,希望你明白我的意思


在第二个控制器中创建一个方法并将其命名为 initData 或其他名称。如果用户验证正确,您可以将用户名或电子邮件甚至对象从登录控制器传递到第二个控制器。

首先,在主控制器中创建 initData() 方法,并使用字符串或对象作为参数,因为您需要向其传递一些内容。在此示例中,传递给该方法的参数是 User 类的对象,但如果需要,您可以仅传递用户名字符串。不过,传递对象可以给您带来更大的灵活性。

//In main window controller
    public void initData(User loggedUser) {
    userLoggedIn = loggedUser;
    labelUserLoggedIn.setText(userLoggedIn.getEmail());
}

然后,在登录控制器中,您可以进行用户验证,然后将对象/字符串传递到第二个控制器,然后再更改到第二个窗口。

这是我目前在应用程序中使用的一个示例。第一步是创建 FXMLLoader 的实例,然后加载 mainwindow.fxml,设置场景,获取第二个控制器,然后将对象传递给我们在更改为第二个窗口之前创建的 initData() 方法。

用户验证完成后,我使用此方法传递对象,然后更改到第二个窗口。可能有更好的方法来做到这一点,但这个效果很好。

// In second controller
 public void changeToMainWindow() throws IOException {
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("mainwindow.fxml"));
    Parent root = loader.load();
    Scene mainScene = new Scene(root);

    MainWindowController mainWindowController = loader.getController();
    mainWindowController.initData(loggedUser);

    Stage primaryStage = (Stage) loginButton.getScene().getWindow();
    primaryStage.setScene(mainScene);
    primaryStage.show();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取登录用户 JavaFX 和 MySQL 的相关文章

随机推荐

  • 如何让Eclipse使用JDK8来编译项目?

    我正在尝试新的 jdk8 这里提供什么http jdk8 java net lambda http jdk8 java net lambda 我可以从命令行编译并运行我的项目 我还可以将这个新的 JDK 添加到Installed JREs在
  • 获取 ngComponentOutlet 的引用

    我正在使用 ngComponentOutlet 动态创建一个组件 听上去像 import Component NgModule from angular core import BrowserModule from angular plat
  • 实际上如何使用 C 库?

    我确信这个问题已经被问过很多次了 但我无法弄清楚 耐心听我说 因此 当您下载库时 您会得到一堆 c 和 h 文件 以及许多其他内容 现在假设您想使用这个库编写一个程序 我将所有 h 文件复制到我的项目目录中 它只是无法编译 太好了 然后我将
  • 如何在 Python 中将 '%' 替换为 '\x'

    我的目标是将base64编码的 EB 字符串转换为 xEB 然而 一尝试 我发现这很难 并且通过 string replace 和 re sub 都无法实现 我的代码失败如下 target EB AF B8 EB 9F AC EC 8A A
  • 如何使用同一个 R 包的多个版本?

    为了能够比较包的两个版本 我需要能够选择加载哪个版本的包 R 的包系统默认设置为覆盖现有包 以便您始终拥有最新版本 我该如何覆盖这种行为 到目前为止我的想法是 我可以获取包源 编辑描述以给出不同的名称 并实际上构建两个不同的包 不过 我宁愿
  • 谁能告诉我 python 中的 pika 和 kombu 消息传递库有什么区别?

    我想在我的应用程序中使用消息传递库与rabbitmq交互 谁能解释一下 pika 和 kombu 库之间的区别吗 Kombu 和 pika 是两个不同的 Python 库 它们从根本上服务于相同的目的 向消息代理发布消息和使用消息代理发送消
  • 检查谷歌地图应用程序是否安装在react-native iOS中

    我尝试使用 npm 模块react native check app install但我无法实现 结果总是错误的 还尝试过react native installed apps获取手机中安装的应用程序列表 但这始终返回空列表 您确定声明了
  • Laravel 所有输入字段均为必填

    我有大约 50 个输入字段 它们都是必需的 有没有简单的方法来检查它们是否都已设置 所以我不必手动将每个字段放入我的模型中 验证规则为 必需 我知道这已经晚了 但我编写了一个简单的函数来为自己解决这个问题 foreach request g
  • 以网格格式绘制脉冲响应函数

    我已经从 R 中的 VAR 模型运行了以下脉冲响应函数 debtarg 1 lt irf var est debt arg response pfdebt arg impulse sp n ahead 40 ortho TRUE boot
  • Java Web 开发的学习路线?

    我继承了一个大型Java Web项目 我必须对其进行一些修改 在基础知识方面我是一个相当称职的Java程序员 但我以前从未做过任何JSP编程或EJB编程 我记得大约 5 年前在大学里做过一些 servlet 编程 但我假设从那时起一切都发生
  • 访问控件值的最有效方法是什么?

    在我必须访问控件的值的两个选择中 哪个是最有效的 getComponent ControlName getValue or dataSource getItemValue FieldName 我发现有时getComponent似乎没有返回当
  • 使用 Python 查找 Mac UUID/序列号

    基本上 我计划将计算机的 UUID 序列号与它运行的密钥绑定起来 在 Windows 上 我发现获取 UUID 很容易 但我很难为 Mac 获取任何东西 有什么解决办法吗 MacOS 有一个内置程序用于访问此信息 您可以使用以下命令获取它
  • 调整工作表演示文稿 SwiftUI 的大小

    我正在尝试以小尺寸呈现模型视图 有什么办法可以调整大小吗 Button Present self presentingModal true padding sheet isPresented presentingModal content
  • 将图像从 api url 加载到 Angular 5 组件中

    我有一个 html 结构如下的组件 img src img 并在打字稿中 constructor private loginService LoginService this img null this loadImage loadImag
  • 如何解决此问题:应用程序启用 YouTube 视频的后台播放

    我制作了一个播放 YouTube 视频的phonegap 应用程序 谷歌已将其从 Play 商店下架 因为 该应用程序可以在后台播放 YouTube 视频 我不知道这意味着什么 有人可以帮我解决这个问题 以便视频不会在后台播放吗 Thank
  • Windows 服务中使用 App.Config 的 WCF 命名管道

    我烦了 好的 这是错误 net pipe localhost MyIpcAppToService 上没有侦听端点可以接受该消息 这通常是由不正确的地址或 SOAP 操作引起的 有关更多详细信息 请参阅 InnerException 如果存在
  • 无法在 makefile 中调用 bash 函数

    我的印象是我可以在 GNU makefile 中调用 bash 函数 但似乎是错误的 这是一个简单的测试 我定义了这个函数 gt type lsc lsc is a function lsc ls color auto color tty
  • java.lang.IllegalStateException:无法获取表面

    我正在尝试创建一个应用程序 使用户能够录制其智能手机的屏幕 这是我的起始代码 import android content Context import android content Intent import android hardw
  • 在 Azure 中,为什么 AuthClientId 也称为应用程序 Id?

    我发现 Azure 中的应用程序注册非常令人困惑 在我的在这里提问 https stackoverflow com questions 50921099 invalid provider type specified cryptograph
  • 获取登录用户 JavaFX 和 MySQL

    我正在开发我的项目 其中有用户界面 用户必须在登录阶段的文本字段中输入用户名和密码 这会将他移至下一个阶段 我想知道当前登录的是哪个用户 这两个阶段有单独的控制器 我尝试在登录阶段创建 setter 和 getter 将用户设置为他在用户名