背景:在显示主UI(myGUI)页面之前,我正在创建一个登录浏览器页面。我使用HashMap来存储正确的用户名和密码组合。键被放在一个getter方法中,然后我从LoginBrowser类构造函数访问它,在那里我构建了实际的UI。
问题:当前,密钥值存储正确,登录成功。在输入正确的凭据后,它将正确加载主UI。我试图用里面的键实例化这个类,然后调用dispose方法。但是,登录浏览器UI不会在之后消失。我的实例化有什么问题,我该如何解决?
我的当前代码:
主要方法:
public static void main(String[] args) {
IdAndPasswords s = new IdAndPasswords();
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
LoginBrowser lb = new LoginBrowser(s.getInfo());
lb.setVisible(true);
//myGUI.requestFocusInWindow(); // makes sure textfield or other components don't auto focus on start-up
lb.setTitle("Chat App");
lb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
}
登录浏览器类生成器:
HashMap<String,String> loginInfo = new HashMap<String,String>();
/**
* Creates new form LoginBrowser
* @param loginOG
*/
public LoginBrowser(HashMap<String,String> loginOG) {
initComponents();
this.loginInfo = loginOG;
}
登录浏览器操作执行方法:
/*
If login button to perform actions
when pressed
*/
private void loginBtnActionPerformed(java.awt.event.ActionEvent evt) {
if(evt.getSource()==loginBtn) {
String userIDNew = usernameText.getText(); // get text of JTextfield
String passwordNew = String.valueOf(passwordText.getPassword()); // get text of JPasswordfield and convert
if(loginInfo.containsKey(userIDNew)) { // key
// if entered characters in strings match up,
// display message and get rid of login browser
if(loginInfo.get(userIDNew).equals(passwordNew)) {
JOptionPane.showMessageDialog(rootPane, "Login successful");
IdAndPasswords s = new IdAndPasswords();
LoginBrowser lb = new LoginBrowser(loginInfo);
lb.dispose(); // dispose login browser
// Once old form is disposed, open main gui form
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
myGUI myGUI = new myGUI(userIDNew);
myGUI.setVisible(true);
//myGUI.requestFocusInWindow(); // makes sure textfield or other components don't auto focus on start-up
myGUI.setTitle("Chat App");
myGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
// tell user if info entered is incorrect
} else {
JOptionPane.showMessageDialog(rootPane, "Incorrect Password");
}
} else {
JOptionPane.showMessageDialog(rootPane, "Incorrect Username");
}
}
}
而不是用键实例化类:
LoginBrowser lb = new LoginBrowser(loginInfo);
lb.dispose(); // dispose login browser
简单地使用这个。从netbeans的设计特性中控制JFrame:
this.dispose();