2012-01-08 83 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

你可以創建一個靜態方法。保持登錄信息!