我使用了很多方法,例如hide();
,setvisibility
等等。但他们没有工作。
如何通过单击另一个框架按钮动态关闭它?
我已经使用了按钮下面的所有内容但没有工作:
rest1.Disp ds = new rest1.Disp();
ds.setVisible(true);
rest.Cashier c = new rest.Cashier();
c.hide();
c.setVisible(false);
c.setDefaultCloseOperation(HIDE_ON_CLOSE);
c.setDefaultCloseOperation(EXIT_ON_CLOSE);
c.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
答案 0 :(得分:1)
您应该在初始化JFrame期间调用setDefaultCloseOperation
。这告诉系统当' X'单击(关闭)JFrame按钮。
它有一个整数参数,可以取4个可能的值:
- DO_NOTHING_ON_CLOSE(在WindowConstants中定义):不要做 任何事情;要求程序处理中的操作 注册WindowListener对象的windowClosing方法。
- HIDE_ON_CLOSE(在WindowConstants中定义):自动隐藏 调用任何已注册的WindowListener对象后的帧。
- DISPOSE_ON_CLOSE(在WindowConstants中定义):自动隐藏和 在调用任何已注册的WindowListener之后处理该帧 对象。
- EXIT_ON_CLOSE(在JFrame中定义):退出应用程序 使用System退出方法。仅在应用程序中使用它。
听起来DISPOSE_ON_CLOSE
正是您正在寻找的东西 - 它将隐藏和处置JFrame上的' X'单击按钮。
因此,在JFrame的初始化中,请调用
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
进一步阅读:https://docs.oracle.com/javase/tutorial/uiswing/components/frame.html
当您将JFrame设置为在关闭时处理时,您也可以以编程方式关闭它。你可以使用
frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
如this answer中所述
然后会发生的是dispatchEvent
将WINDOW_CLOSING事件发送到帧。系统知道它应该处理帧,因为你告诉它DISPOSE_ON_CLOSE。
因此,您应该将该命令放在ActionListener中,以用于关闭框架的按钮:
someButton.addActionListener(
new ActionListener( )
{
public void actionPerformed(ActionEvent e)
{
frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
}
}
);
总之,这两件事完成了你的画面从正常的按钮关闭,而不是正常的' X'关闭按钮。