如何为一个不会关闭其他打开的窗口的窗口编写退出程序?

时间:2014-05-20 21:02:33

标签: java swing

我正在创建一个简单的文本编辑器,并遇到了一个小问题。我可以通过单击菜单中的新按钮打开并打开几个用于创建文本文档的新窗口。我的问题是如果我点击"文件"那么"退出"从菜单中关闭所有窗口,而不仅仅是我想关闭的窗口。如何制作它以便它只关闭所选择的窗口,而不是整个应用程序。

这里有一些代码:

public void actionPerformed(ActionEvent event) {
    if(event.getSource() == newFile) {
        new EditorGUI();
    } else if(event.getSource() == openFile) {
        JFileChooser open = new JFileChooser();
        open.showOpenDialog(null);
        File file = open.getSelectedFile();             
        openingFiles(file);
    }  else if(event.getSource() == exit) {
        System.exit(0);
    }
}

当我点击窗口右上角的X时,它可以正常工作:

private JFrame createEditorWindow() {
    editorWindow = new JFrame("JavaEdit");
    editorWindow.setVisible(true);
    editorWindow.setExtendedState(Frame.MAXIMIZED_BOTH);
    editorWindow.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
    // Create Menu Bar
    editorWindow.setJMenuBar(createMenuBar());
    editorWindow.add(scroll, BorderLayout.CENTER);
    editorWindow.pack();
    // Centers application on screen
    editorWindow.setLocationRelativeTo(null);

    return editorWindow;
}

截图: enter image description here

3 个答案:

答案 0 :(得分:4)

不要使用多个框架。应用程序应该只有一个主JFrame。

然后子窗口应为JDialog。 JDialog只支持DISPOSE_ON_CLOSE,因此您不必担心退出应用程序。

答案 1 :(得分:1)

这似乎也可以解决问题:

if(event.getSource() == exit) {
    editorWindow.dispose();
}

答案 2 :(得分:1)

您可以使用以下代码编写代码:

private JFrame createEditorWindow() {
    JFrame editorWindow = new JFrame("JavaEdit");
    editorWindow.setExtendedState(JFrame.MAXIMIZED_BOTH);
    editorWindow.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
    editorWindow.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosing(WindowEvent event) {
            exitProcedure();
        }
    });
    // Create Menu Bar
    editorWindow.setJMenuBar(createMenuBar());
    editorWindow.add(scroll, BorderLayout.CENTER);
    editorWindow.pack();
    // Centers application on screen
    editorWindow.setLocationRelativeTo(null);

    editorWindow.setVisible(true);
    return editorWindow;
}

public void exitProcedure() {
    editorWindow.dispose();
}

您在JMenuUtem动作侦听器中为Exit执行exitProcedure。