0

我正在创建一个程序,它使用几个不同的交互菜单来允许用户访问系统的不同部分。我正在使用 Netbeans 来帮助进行编码。

目前我被困在一个任务上。

当用户通过“登录”表单登录系统时,系统会验证详细信息,然后根据凭据将该用户重定向到“user_details”或“admin_menu”。这么多工作正常。从那里,用户可以访问允许他们更新已保存在数据库中的详细信息的表单。

我发现限制简单用户更新其详细信息的唯一方法是要求他们再次登录,然后从那里检索他们的详细信息以便更新。这个过程很混乱,但它确实有效。

考虑到这一点,我如何从另一个 jform(User_details)检索位于 jform Login 中的文本字段“用户名”中的任何内容,User_details jform 仅在登录成功后打开(一旦发生登录被丢弃并且 user_details已打开)。

顺便说一句,我做了很多研究,但似乎找不到我的问题的答案。

这是我的登录代码的一部分:

String sql = "select * from user where Username =? and password=?";
        try {
            pst = con.prepareStatement(sql);
            pst.setString(1, username.getText());
            pst.setString(2, password.getText());
            rs = pst.executeQuery();

            int count = 0;
            while (rs.next()) {
                count = count + 1;
            }
            if (count == 1) {
                JOptionPane.showMessageDialog(null, "Access Granted");
                if ("manager@manage.com".equals(t.getText())) {
                    rs.close();
                    pst.close();
                    close();
                    Admin_menu am = new Admin_menu();
                    am.setVisible(true);
                } else {
                    rs.close();
                    pst.close();
                    close();
                    User_details M = new User_details();
                    M.setVisible(true);
                }
            } else {
                JOptionPane.showMessageDialog(null, "Incorrect Username or Password");
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex);

        } finally {
            try {
                rs.close();
                pst.close();
            } catch (Exception ex) {
            }
        }

我怎样才能让 User_details Jform 获得文本字段用户名中曾经估算过的内容?

4

5 回答 5

1

您可能想要创建一些类来表示登录用户在您的应用程序中所做的一切的状态。传统上,您将其称为会话。登录用户是该会话的属性,因此您将其保存在该字段中。您将会话传递到您制作的每一帧中,以便他们都可以访问它。

用户注销时会话无效。

然后从您的框架、组件等中,您可以从会话中获取当前用户。

但是,请尝试在此处将前端代码与后端代码分开。查看MVC 模式

于 2012-08-13T09:46:01.227 回答
0

像这样创建一个名为 session 的类:

public class Session {

    public static String userName = "";

}

当登录发生时,将 Session.userName 的值设置为给定的用户名,当用户注销时,将 Session.userName 设置为“”。您只需键入 Session.userName 即可访问 Session.userName。其他会话变量也应该在 Session 类中定义。

于 2012-08-13T10:02:41.090 回答
0

尝试将变量声明为 public 并使用您想要使用它们的其他 jframe 来初始化它们,例如

public your class{

    initComponents();
    String a;


}

希望这可以帮助 :)

于 2012-08-13T09:50:22.287 回答
0

您可以创建一个类“BasicView”,其中存在一个类变量来存储您的信息,因此该类的每​​个实例都可以使用 ist。然后你只需要扩展这个基本类,或者只使用 BasicView.value 或 BasicView.getValue()。您也可以使用同步方法来更改此 var。

public class BasicView {
    private static Object value;

    public synchronized void setValue(Object value) {
        this.value = value;
    }

    public Oject getValue() {
        return value;
    }
    .
    .
    .
}

我用它来初始化一个 ServicesLocator 来获取我所有的 bean 中的服务。:)

编辑:还要看看 MVC 模式并在控制器(基本控制器)或类似的东西中使用它。

于 2012-08-13T09:54:39.497 回答
0

1.使用Composition, 并确保您的 GUI 类在从不同的 JFrame 引用时始终返回相同的 Object。

2.这可以使用Singleton Principle.

于 2012-08-13T09:56:42.087 回答