2012-01-08 27 views
0

在java中使用swing来为我的课程作一个测验。我做了我的主类,一个标签框架,其中包含单独的jpanel作为标签,例如登录页面,以及使用sqlite获取我的数据。然而,我正在努力想看看我可以如何说我的登录jpanel和我的主类。在挥杆的面板之间传递信息?

mainJFrame.addWindowListener(new WindowAdapter() { 
     public void windowActivated(WindowEvent arg0) { 
      LoginPanel loginEntry = new LoginPanel(); 
      welcomePanel.add(loginEntry); 
      welcomePanel.setBounds(0,0,728,390); 

//所以在这里我想要一个if语句,以便在成功登录时添加其他选项卡并可以看到。但是,如果你还没有登录不可用。

   tabbedPane.addTab("Quick Guide", null, quickGuidePanel, null); 
       tabbedPane.addTab("Examples", null, examplePanel, null); 
       tabbedPane.addTab("Run Quiz", null, runQuizPanel, null); 
       tabbedPane.addTab("Exams", null, examPanel, null); 
       tabbedPane.addTab("View Performance", null, viewPerfPanel, null); 
       tabbedPane.addTab("Settings", null, settingsPanel, null); 

     } 
    }); 

我试图创造一个getter和setter,并试图getSuccessfulLogin(),但没有工作:(

感谢

回答

1

我在应用程序中填充登录信息的好方法是单例模式。 例如:

public class AuthService { 
    private static AuthService myInstance; 

    private User currentUser; 
    ... 

    private AuthService() { 
     // Constructor is private. The Object can only be instanciated by getInstance() 
    } 

    public static AuthService getInstance() { 
     if (myInstance == null) { 
     myInstance = new AuthService(); 
     } 

     return myInstance; 
    } 

    public User getCurrentUser() 
    ... 


    public void setLoggedInUser(User user) 
    ... 

    public User login(String userName, String password) 
    ... 

} 

通过静态getInstance() - 方法,你可以得到确切无处不在Appliaction同一对象的实例,而无需携带对象槽全部constructros或方法。 您可以保存所有与认证相关的数据,甚至包含一些执行登录工作的方法。 如果没有成功登录的用户存在,getCurrentUser()可能返回null。

如果可以同时从多个客户端登录,则需要为AuthService中的不同会话保存不同的UserInformation。

+0

感谢您的回复!我设置了它,但我有一个问题。当我创建一个新的authservice对象时,我只是在调用getInstance之后? – user1044585 2012-01-08 14:06:07

+0

是的,没有:-)这里的技巧是,你在整个应用程序中只有一个AuthService对象。如果您第一次调用AuthService.getInstance(),它将创建一个新实例。在随后的所有调用中,它将返回相同的旧实例。您可以在完整的应用程序中找到相同的对象。你是否需要多个同时使用loggend的用户? – treeno 2012-01-08 14:13:41

+0

不,只是一个。所以在我的登录面板ID有... AuthService a = new AuthService(); a.setLoggedInUser(userObject);然后稍后再做AuthService a = a.getInstance(); a.getCurrentUser? – user1044585 2012-01-08 14:23:42

0

更改行:

LoginPanel loginEntry = new LoginPanel(); 

LoginPanel loginEntry = new LoginPanel(MainJFrame.this); 

和登录函数内部:

if (success) { 
    //add the TabbedPane 
    mainJFrame.add(tabbedPane); 
} else { 
    // do not add the TabbePane 
} 
0

为了检查是否登录成功后,你可以创建包含布尔当前用户是否成功登录到一个静态变量静态有可被访问的意义贯穿整个计划。

static Boolean isLoggedIn

你可能看到的是你需要的地方设置变量,并在其他地方见过它允许“沟通”

欲了解更多信息,最好是分配一个告知对方选项卡中的方法。这将是更多基于事件/动作的编程,您可以将程序各个部分的责任直接保存下来。

正如@Adel指出的,您可以将主框架链接到登录面板。这样做的好处是可以让它更紧密,但是这也可能会产生问题,如果您有更多的选项卡需要相互通信,那么您需要通知所有面板有哪些面板。

0

你可以创建一个静态方法。保持登录信息!