通过按钮关闭JFrame

时间:2017-11-28 14:08:21

标签: swing

我使用了很多方法,例如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);

1 个答案:

答案 0 :(得分:1)

第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

第2步。

当您将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'关闭按钮。