根据数据库中的变量在Java中加载不同的视图?

时间:2017-02-07 00:17:53

标签: java swing oop user-interface netbeans

我更习惯于程序编程,我已经完成的工作基本上有效,但是当我看到它时,我认为它不是非常有效,并且必须有更好的方法来做同样的事情。有人能告诉我它是什么吗?其根源是如何从main.java加载不同的视图,并根据数据库的内容处理它们。

我正在使用JDBC构建带有Java接口的数据库应用程序。我希望能够为3个不同的用户加载3个不同的GUI,具体取决于哪个用户登录。我最初的尝试是为数据库中的每个表构建一个java bean类,并使用相应的Manager类来处理与数据库的交互。在用户端,我加载了一个登录窗口,让他们尝试访问数据库。当用户输入正确的登录详细信息时,会将这些详细信息保存到名为Session.java的Singleton类中,以便在他们使用该程序时进行参考,这样我就不必来回查看数据库以进行检查他们的信息。然后使用Singleton类确定要为其加载的适当接口。我是这样从Main.java这样做的:

LoginScreen login = new LoginScreen();  
JohnsView john = new JohnsView();
MarysView mary = new MarysView();
PaulsView paul = new PaulsView();
login.setVisible(true);
login.setLocationRelativeTo(null);

//while the user has not completed login hide their database interface screen
while (!Session.isLoginSucessful()) {
   john.setVisible(false);
   mary.setVisible(false);
   paul.setVisible(false);
}

当用户通过GUI输入登录详细信息时,我会检查他们的用户名和密码是否与数据库中的条目匹配。如果是的话,我在名为Session.java的Singleton类中设置变量 这样:

    Session.setTheUserID(user.getIduser());
    Session.setTheUserName(user.getUserName());
    Session.setTheUserPassword(user.getPassword());
    Session.setTheUserLevel(user.getUserLevel());
    Session.setTheUserStaffID(user.getStaffID());
     Session.setLoginSucessful(true);

然后回到main.java我使用switch语句到.dispose()不需要的视图,并使相应的视图显示如下:

    //dispose of login once it's finished with    
    login.dispose();

    //get the user 'level (1,2 or 3) from the singleton class...
    int usrLev = Session.getTheUserLevel();

    //check their level with the switch statement for the appropriate view to load
    switch(usrLev) {
        case 1:
            john.setVisible(true);
            mary.dispose();
            peter.dispose();
            break;
        case 2:
            mary.setVisible(true);
            john.dispose();
            peter.dispose();
            break;
        case 3:
            peter.setVisible(true);
            mary.dispose();
            peter.dispose();
            break;
        default:
            break;
    }  

我知道我可以用不同的方式解决这个问题,并将登录框放到一个更大的Jframe中,并根据登录的人来操纵Jframe的内容。我在这里回答了其他一些问题时已经看过一些这方面的例子,但这并没有达到我想要的目的。我希望能够根据从数据库派生的变量从Main加载不同的视图。我是否需要某种从main调用的视图管理器类?我已经尝试了几次,但最终删除它,因为它在我尝试时没有意义。我似乎无法在java中解决这个问题。任何帮助理解这一点并回答它是值得赞赏的。

1 个答案:

答案 0 :(得分:0)

行。我解决了这个问题虽然不是删除帖子,但我还是把它留给了其他任何比OOP更习惯于程序编程的人。

除了启动应用程序的第一个窗口之外,Main中基本没有任何反应。在我的情况下,登录屏幕。许多人删除main,但我发现保留它很有用,因为我可能想要做一些多线程来处理将来与数据库的通信,如果我将数据库推送到服务器而不是在我的本地机器上。

基本上,上面第3块中的代码在GUI代码中,在按钮操作方法内,处理按钮按下以进行登录。在该方法中,您监听用户的输入,检查它是否与数据库中的内容相匹配。如果它没有通过一些视觉反馈告诉他们。如果它允许代码进入上面的第3个块,那么您加载所需的视图并在当前视图上调用this.dispose()

我会离开这一点。如果它不是一个有用的贡献,我将删除它。