我已经阅读了类似的主题,但我确实在那里找到答案。
我用关闭按钮创建了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;
}
答案 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
每次调用时都很可能不会创建新按钮。