如何关闭当前的 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
,并在构造函数中调用此 JFrame
的 setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE)
。
之后您可以在您的操作中使用 setVisible(false)
- 但对于这个 JFrame
而不是新创建的。
顺便说一句。 getCancelButton()
很可能不会在每次调用时都创建一个新按钮。
我读过类似的主题,但我确实在那里找到了答案。
我创建了带有关闭按钮的 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
,并在构造函数中调用此 JFrame
的 setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE)
。
之后您可以在您的操作中使用 setVisible(false)
- 但对于这个 JFrame
而不是新创建的。
顺便说一句。 getCancelButton()
很可能不会在每次调用时都创建一个新按钮。