Java样式关于JFrame和DefaultCloseOperation

时间:2013-12-30 19:50:44

标签: java swing jframe

特别是Java的新手,我有一个简单的样式/设计/语法问题: 在创建JFrame时:

JFrame frame = new JFrame(NAME);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

是否需要EXIT_ON_CLOSE之前的JFrame?是不是已经使用frame.setDefault指定了??

最后一个问题是使用JFrame而不是Frame有什么特别的好处吗? 优点&缺点

提前谢谢!

5 个答案:

答案 0 :(得分:3)

  

是否需要EXIT_ON_CLOSE之前的JFrame?不是吗   使用frame.setDefault ...?

指定

必要的原因JFrame.EXIT_ON_CLOSE是常量(类级变量)。 设置时,使用系统退出方法退出应用程序。

如果你像这样进行静态导入,你可以省略它。

静态导入示例:

import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class Test{

  public static void main(String args[]) throws CloneNotSupportedException {
       JFrame frame = new JFrame();
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

    }        
}
  

最后一个问题是使用JFrame有什么特别的好处   而不是框架?优点&缺点

JFrame来自swing,而Frame更加过时了。您有更多信息Swing vs AWT

答案 1 :(得分:2)

EXIT_ON_CLOSE是属于JFrame类的静态变量。通过指定JFrame.EXIT_ON_CLOSE来使用它是非常标准的,但如果真的困扰你,你也可以导入它。

Math类具有类似的静态变量。

JFrame是Swing,Frame是AWT。这是开始谷歌搜索的好地方。

答案 2 :(得分:2)

  

是否需要EXIT_ON_CLOSE之前的JFrame?不是吗   使用frame.setDefault ...?

指定

是的,因为您需要在关闭Application框架时提供所需的正确退出行为:有四个这样的常量可用:

  • DO_NOTHING_ON_CLOSE:不要做任何事;如果您需要程序来处理关闭操作并在窗口关闭事件上做一些事情,请使用它;你可以在这里使用Window Listeners

  • HIDE_ON_CLOSE:在调用任何已注册的WindowListener对象后自动隐藏框架。因此,如果需要,请将WindowListener注册到JFrame

  • DISPOSE_ON_CLOSE:在调用任何已注册的WindowListener对象后自动隐藏和处置框架。

  • EXIT_ON_CLOSE:使用系统退出方法退出应用程序。仅在应用程序中使用它。

所有这些常量都在WindowCOnstants接口中定义。但是,您想知道默认值设置为默认关闭操作:它是HIDE_ON_CLOSE

<强>参考:

  1. setDefaultCloseOperation(int operation)

答案 3 :(得分:1)

JFrame.EXIT_ON_CLOSE是用于控制窗口关闭操作的常量 与System.exit(0);相同“准则”可能会这样:

   protected void processWindowEvent(WindowEvent e) {
        super.processWindowEvent(e);

        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            switch(defaultCloseOperation) {
              ...
          case EXIT_ON_CLOSE:
                  // This needs to match the checkExit call in
                  // setDefaultCloseOperation
        System.exit(0);
        break;
            }
        }
    }

答案 4 :(得分:-1)

  
    

是否需要EXIT_ON_CLOSE之前的JFrame?是不是已经使用frame.setDefault指定了??

  

是的,这是必要的,因为常量EXIT_ON_CLOSEJFrame类中。您不需要它的唯一时间是使用静态导入或扩展JFrame

  
    

最后一个问题是使用JFrame而不是Frame有什么特别的好处吗?优点&amp;缺点

  

JFrame是Swing库的一部分,Frame是AWT库的一部分。通常,Swing比Awt

更有效和更先进