LINUX.ORG.RU

[java][swing] Диалог сохранения при закрытии

 ,


0

1

Сделал в netbeans проектик, хочу что бы при закрытии главной формы появлялся диалог сохраниния. В DesktopApplicationApp.java заменил метод startup на вот такой:

    @Override protected void startup() {
        DesktopApplicationView view = new DesktopApplicationView(this);
        final JFrame frame = view.getFrame();
        frame.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                Object[] buttons = {"Да", "Нет", "Отмена"};
                int ans = JOptionPane.showOptionDialog(null, "Сохранить внеснные изменения?", "Диалог сохранения", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, buttons, buttons[0]);
                if (ans == 0) {
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    System.out.println("сохранить и выйти");
                } else if (ans == 1){
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    System.out.println("выйти");
                } else if (ans == 2){
                    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    System.out.println("ничего не делать");
                }
            }
        });
        show(view);
    }
Прблема в том, что программа закрывается при нажатии на кнопку отмена. Как это исправить?


А сделать frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE), а потом убивать ручками пробовал?

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Да, вызвал сначала:

    @Override protected void startup() {
        DesktopApplicationView view = new DesktopApplicationView(this);
        final JFrame frame = view.getFrame();
>      frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        frame.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                Object[] buttons = {"Да", "Нет", "Отмена"};
                int ans = JOptionPane.showOptionDialog(null, "Сохранить внеснные изменения?", "Диалог сохранения", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, buttons, buttons[0]);
                if (ans == 0) {
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    System.out.println("сохранить и выйти");
                } else if (ans == 1){
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    System.out.println("выйти");
                } else if (ans == 2){
                    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    System.out.println("ничего не делать");
                }
            }
        });
        show(view);
    }
Увы не работает.

tr0ll
() автор топика
Ответ на: комментарий от tr0ll
package confirmation;

import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Main {

    public static void main(String[] args) {
        final JFrame frame = new JFrame("Hello");
        frame.setLocationByPlatform(true);
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        frame.setMinimumSize(new Dimension(600,500));
        frame.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent we) {
                Object[] buttons = {"Да", "Нет", "Отмена"};
                int ans = JOptionPane.showOptionDialog(null,
                        "Сохранить внеснные изменения?",
                        "Диалог сохранения",
                        JOptionPane.YES_NO_OPTION,
                        JOptionPane.QUESTION_MESSAGE,
                        null, buttons, buttons[0]);
                if (ans == 0) {
                    frame.dispose();
                    System.out.println("сохранить и выйти");
                } else if (ans == 1){
                    frame.dispose();
                    System.out.println("выйти");
                } else if (ans == 2){
                    System.out.println("ничего не делать");
                }

            }

        });
        frame.setVisible(true);
    }
}
vertexua ★★★★★
()
Ответ на: комментарий от LamerOk

А то, оно такое - авторитетное мнение ) А если серьезно, то хз, я что его код компилил. Я написа что работает и выложил

vertexua ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.