[英]Frame not closing when button is clicked
我在我的 java 项目的登录页面上工作,在登录页面上,用户可以选择创建一个新帐户(如果他还没有)。 如果您看到下面的代码,我在单击按钮时设法打开了创建帐户框架,但在单击创建帐户按钮时我无法关闭登录 JFRAME。 在.netbeans 的设计视图中,我将框架的属性更改为 DISPOSE_ON_CLOSE,但仍然没有发生任何事情。 请让我知道为什么会这样,您可以参考function“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
}
几件事:
在这里,当前 JFrame 没有关闭,因为您没有给出这样做的命令。
在 CreateAccountNowButtonActionPerformed() 方法中,您正在创建注册 JFrame 的实例并将其设置为可见。 所以,它会显示'reg' JFrame。但是,通过这个操作,你应该写
setVisible(false);
代替
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) 的作用与您使用设计视图所做的相同。 由于方法名是不言自明的,它设置了默认的关闭操作,即什么都不做或隐藏这个 JFrame 或处理它或退出程序。 但是,为了应用该操作,我们需要调用一些使用此属性的 function。 而这个 function 是 setVisible(false)。
当您使用此方法时,将使用您在框架属性中提到的默认关闭操作。
因此,保持设计视图中的属性不变,只需更改行
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
到
setVisible(false);
它将完成所需的工作。 在运行代码并按下按钮时进行此更改后,它将打开注册 JFrame 并关闭当前的 JFrame。
与代码相关的一些建议:另一个答案中已经提到一点,对于密码,您应该使用 JPasswordField 而不是 JTextField。 做同样的事情。 此外,最好编写以大写字母开头的 class 名称。 您应该在登录和注册 class 名称中应用相同的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.