如何关闭当前的JFrame?

时间:2015-04-22 19:38:34

标签: java swing jframe jbutton

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

我用关闭按钮创建了JFrame。点击后我想关闭当前窗口。我尝试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;
     }

2 个答案:

答案 0 :(得分:2)

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

JFrame frame;

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

这完全关闭了框架。如果只打开了这个帧并且没有运行非deamamon线程,则在释放帧后程序将退出。

答案 1 :(得分:2)

问题是以下行动(而不仅仅是这个):

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

在这里您创建一个新的Windows对象并调用getCreateFrame(),然后创建一个新的JFrame,然后在其上调用setDefaultCloseOperation()

所以您使用不同的Windows / JFrame个实例。

相反,您应该在JFrame的构造函数中创建Windows,并在构造函数中调用此setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE)的{​​{1}}。

之后,您可以在行动中使用JFrame - 但对于此setVisible(false)而不是新创建的。{/ p>

顺便说一句。 JFrame每次调用时都很可能不会创建新按钮。