单击按钮时框架未关闭



我正在使用一个登录页面,该页面是我的java项目,在登录页面上,如果用户没有,他可以选择创建一个新帐户。如果你看到下面的代码,我成功地在点击按钮时打开了创建帐户框架,但在点击创建帐户按钮时我无法关闭登录JFRAME。在netbeans的设计视图中,我将帧的属性更改为DISPOSE_ON_CLOSE,但仍然没有发生任何事情。请告诉我为什么会这样,你们可以参考函数";CreateAccountNowButtonActionPerformed";

package pleasework;
import javax.swing.JFrame;
/**
*
* @author jacksonseow
*/
public class login extends javax.swing.JFrame {
/*Creates new form login*/
public login() {
initComponents();
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {
mainLabel = new javax.swing.JLabel();
usernameLabel = new javax.swing.JLabel();
txtUsername = new javax.swing.JTextField();
passwordLabel = new javax.swing.JLabel();
txtPassword = new javax.swing.JTextField();
LoginButton = new javax.swing.JButton();
jLabel1 = new javax.swing.JLabel();
CreateAccountNowButton = new javax.swing.JButton();
dealLabel = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setBackground(new java.awt.Color(102, 102, 102));
setPreferredSize(new java.awt.Dimension(650, 380));
mainLabel.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
mainLabel.setForeground(new java.awt.Color(255, 255, 255));
mainLabel.setText("Gracious Givers");
usernameLabel.setText("Username");
txtUsername.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtUsernameActionPerformed(evt);
}
});
passwordLabel.setText("Password");
txtPassword.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
txtPasswordActionPerformed(evt);
}
});
LoginButton.setText("Login");
LoginButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
LoginButtonActionPerformed(evt);
}
});
jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
jLabel1.setForeground(new java.awt.Color(51, 102, 255));
jLabel1.setText("OR");
CreateAccountNowButton.setText("Create Account Now!");
CreateAccountNowButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
CreateAccountNowButtonActionPerformed(evt);
}
});
dealLabel.setIcon(new javax.swing.ImageIcon("/Users/jacksonseow/Netbeans Images/deal.png")); // NOI18N
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(passwordLabel, javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(usernameLabel, javax.swing.GroupLayout.Alignment.TRAILING))
.addGap(42, 42, 42)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(txtUsername)
.addComponent(txtPassword, javax.swing.GroupLayout.DEFAULT_SIZE, 130, Short.MAX_VALUE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(221, 221, 221)
.addComponent(CreateAccountNowButton, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(229, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(307, 307, 307)
.addComponent(jLabel1)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(253, 253, 253)
.addComponent(dealLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(231, 231, 231)
.addComponent(mainLabel)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGroup(layout.createSequentialGroup()
.addGap(244, 244, 244)
.addComponent(LoginButton, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(mainLabel)
.addGap(18, 18, 18)
.addComponent(dealLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 99, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 31, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(usernameLabel)
.addComponent(txtUsername, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(23, 23, 23)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(passwordLabel))
.addGap(18, 18, 18)
.addComponent(LoginButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(CreateAccountNowButton)
.addGap(16, 16, 16))
);
pack();
}// </editor-fold>                        
private void txtUsernameActionPerformed(java.awt.event.ActionEvent evt) {                                            
// TODO add your handling code here:
}                                           
private void txtPasswordActionPerformed(java.awt.event.ActionEvent evt) {                                            
// TODO add your handling code here:
}                                           
private void LoginButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
// TODO add your handling code here:
}                                           
private void CreateAccountNowButtonActionPerformed(java.awt.event.ActionEvent evt) {                                                       
registration reg = new registration();
reg.setVisible(true);
//reg.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);


}                                                      
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(login.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new login().setVisible(true);
}
});
}
// Variables declaration - do not modify                     
private javax.swing.JButton CreateAccountNowButton;
private javax.swing.JButton LoginButton;
private javax.swing.JLabel dealLabel;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel mainLabel;
private javax.swing.JLabel passwordLabel;
private javax.swing.JTextField txtPassword;
private javax.swing.JTextField txtUsername;
private javax.swing.JLabel usernameLabel;
// End of variables declaration                   
}

两件事:

  1. 使用JPasswordField而不是JTextField作为密码
  2. 与创建自己的JFrame相比,一个更好的选择是只使用所有控件(减去"确定取消"(构建一个JPanel,并在JPanel中使用JOptionPane.showConfirmMessage(…(。这样,"确定"取消按钮将自动为您处理

这里,当前JFrame没有关闭,因为您没有给出这样做的命令。

在CreateAccountNowButtonActionPerformed((方法中,您正在创建注册JFrame的一个实例并将其设置为可见。因此,它将显示"reg"JFrame。但是,使用此操作,您应该编写

setVisible(false);

而不是

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE(执行与使用设计视图相同的操作。由于方法名称是不言自明的,因此它设置了默认的关闭操作,即不执行任何操作或隐藏此JFrame、处理它或退出程序。但是,为了应用该操作,我们需要调用一些使用此属性的函数。这个函数是setVisible(false(。

使用此方法时,将使用在框架属性中提到的默认关闭操作。

因此,保持属性在设计视图中的原样,只需更改线

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

setVisible(false);

并且它将完成期望的工作。在这个更改之后,当您运行代码并按下按钮时,它将打开注册JFrame并关闭当前JFrame。

一些与代码相关的建议:在另一个答案中已经提到了一点,即对于密码,应该使用JPasswordField,而不是JTextField。做同样的事情。此外,最好的做法是写一个以标题字母开头的类名。您应该在登录和注册类名中应用相同的方法。

最新更新