我在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()但这不起作用:(
感谢
答案 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)
你可以创建一个静态方法。举行登录信息!!