Java Swing用setDefaultCloseOperation Vs关闭一个窗口。 addWindowListener

时间:2016-06-09 16:04:32

标签: java swing user-interface jframe window

在java swing应用程序中,以下操作有什么区别?我什么时候更愿意使用另一个?

我已经在互联网上看到了这两个不同的例子:

// Have the window exit on close
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

- 或 -

// Set up a window listener to exit on close
mainFrame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent windowEvent) {
        System.exit(0);
    }
});

第二种方法似乎是更多的代码,所以我想知道为什么我看到它如此广泛使用。这种方法比第一种方法有任何优势吗?

2 个答案:

答案 0 :(得分:2)

实际上它们都是相同的,这个代码来自JFrame:

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

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

但是,调用setDefaultCloseOperation是首选,因为它使用当前现有的JFrame代码(re-usablity)。

答案 1 :(得分:1)

如果您只想要标准关闭,我会使用第一个选项。就像@Berger所说,如果选择第二种方法,可以添加其他功能。