在摆动的面板之间传递信息?

时间:2012-01-08 12:30:20

标签: java swing user-interface

我在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()但这不起作用:(

感谢

4 个答案:

答案 0 :(得分:1)

我在应用程序中填充loginInformation的好方法是Singleton模式。 例如:

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中的任何位置获得完全相同对象的实例,而无需通过所有构造函数或方法携带Object。 您可以在那里保存所有与身份验证相关的数据,甚至是一些用于登录工作的方法。 如果没有成功登录用户,则getCurrentUser()可以返回null。

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

答案 1 :(得分: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
}

答案 2 :(得分:0)

为了检查登录是否成功,你可以创建一个静态变量,它保存一个布尔值,无论当前用户是否成功登录。静态意味着它可以在整个程序中访问。

static Boolean isLoggedIn

您可能看到需要在某处设置该变量,并在某处读取它以允许“通信”

有关更多信息,最好在选项卡中分配相互通知的方法。这将是更多基于事件/动作的编程,您可以直接保持程序每个部分的职责。

正如@Adel所说,你可以将主框架链接到登录面板。这样做的好处是可以让它保持更紧密,但这也可能会产生问题,如果你想让彼此通信的标签更多,你需要通知所有面板哪些面板。

答案 3 :(得分:0)

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