Метод windowClosing () не вызывается - PullRequest
0 голосов
/ 24 апреля 2020
import javax.swing.*;
import java.awt.event.*;

public class Test  {

    Test() {
        JFrame f=new JFrame("CloseIt");
        f.setVisible(true);
        f.setSize(400,200);
        f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        f.addWindowListener(new WindowAdapter(){
            public void WindowClosing(WindowEvent e)
            {
                System.out.print("In Windowclosing opr");
                f.dispose();
            }
        });
    }

    public static void main(String arg[]) {
        Test t=new Test();
    }
}

Я действительно хотел спросить пользователя, хочет ли он сохранить файл перед его закрытием. Но всякий раз, когда я закрываю рамку (крестик), ничего не происходит. windowClosing() даже не звонят.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2020

Вы назвали свой метод WindowClosing().

Однако вызывается метод, который вызывается windowClosing().

Лучшая рекомендация - аннотировать ваши методы с помощью @Override, чтобы компилятор знает, что вы хотите переопределить метод, и может выдать сообщение об ошибке, если ваш метод не переопределил метод суперкласса:

    f.addWindowListener(new WindowAdapter(){
        @Override
        public void windowClosing(WindowEvent e)
        {
            ...
        }
    });
0 голосов
/ 24 апреля 2020

Отредактируйте ваш WindowClosing() метод как windowClosing()

как насчет моего решения, ваше тоже верно.

  addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                int confirmedPane = JOptionPane.showConfirmDialog(null,
                        "Are you sure you want to exit the program?",
                        "Exit Program Message Box",
                        JOptionPane.YES_NO_OPTION);

                if (confirmedPane == JOptionPane.YES_OPTION) {
                    System.out.println("Yes is the option");
                } else {
                    dispose();
                }
            }
        });
...