如何关闭当前的 JFrame?

How to close current JFrame?

我读过类似的主题,但我确实在那里找到了答案。

我创建了带有关闭按钮的 JFrame。单击后我要关闭当前 window。我尝试 setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE),或 setVisible(false)

public class Windows {
 JFrame frame;
 JFrame frame1;


public Windows(){

} 


 public JFrame getCreateFrame(){

  frame1 = new JFrame("Create User");
  frame1.setSize(500,500);
  frame1.setVisible(true);
  frame1.getContentPane().add(new Panels().getwelcomTxtLabelPanel1(), BorderLayout.NORTH);
  frame1.getContentPane().add(new Panels().getCreateUser(), BorderLayout.SOUTH); 
  frame1.getContentPane().add(new Panels().getUserLabel(), BorderLayout.WEST);
  frame1.getContentPane().add(new Panels().getUserField(), BorderLayout.CENTER);
  return frame1;
     }
  }

这是一个按钮。

public JButton getCancelButton(){

 cancel = new JButton("cancel");
 cancel.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e){
          new Windows().getCreateFrame().setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

              }
         });
return cancel;
     }

你必须让框架不可见并处理它。

JFrame frame;

frame.setVisible(false);
frame.dispose();

这将完全关闭框架。如果只有这个框架打开,没有非守护线程运行,程序将在处理框架后退出。

问题在于以下操作(不仅如此):

cancel.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e){
      new Windows().getCreateFrame().setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
   }
});

在这里你创建一个新的 Windows 对象并调用 getCreateFrame() 来创建一个新的 JFrame 然后你在它上面调用 setDefaultCloseOperation()

因此 您使用不同的 Windows / JFrame 个实例。

相反,您应该在 Windows 的构造函数中创建 JFrame,并在构造函数中调用此 JFramesetDefaultCloseOperation(JFrame.HIDE_ON_CLOSE)

之后您可以在您的操作中使用 setVisible(false) - 但对于这个 JFrame 而不是新创建的。

顺便说一句。 getCancelButton() 很可能不会在每次调用时都创建一个新按钮。