Komunikat przed zamknięciem programu.

0

Dodaje WindowListener do okna.

        addWindowListener
                (
                    new WindowAdapter()
                    {
                        public void WindowClosing(WindowEvent evt)
                        {
                            System.out.println("Zamykamy ...");
                            exit();// <- to moja funkcja, w której sprawdzam, czy plik został zapisany
                        }
                    }
                );

Nie działa. Jeśli dam frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
to mój listener nie wykonuje kodu. Jeśli nie dodam tego kodu, to program w ogóle się nie zamyka po kliknięciu przycisku zamknij.

0

Dałeś defaultową operację wyjścia. Lepiej jest:

frame.setDefaultCloseOperation(OnClose.onclose());

//

public class OnClose{
  public static int onclose(){
    // twój kod
    return JFrame.EXIT_ON_CLOSE;
  }
}
0

Właściwe połączenie, to:
addWindowListener(....);
setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
Pozdrawiam
Bogdan S.

0

a najlepiej to:

ramka.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
ramka.addWindowListener(new WindowAdapter(){
           public void WindowClosing(WindowEvent evt){
                    System.out.println("Zamykamy ...");
                    if(exit()){ //plik zostal zapisany
                          ramka.dispose();
                    }
            }
});

pozdrawiam

0

eximius, a w czym to jest lepsze?

0

bardziej czytelne niz rozwiazanie Koziolka - Defaultowa operacja ustawia DO_NOTHING, a listener okna sam decyduje czy zamknac okno czy nie. poza tym pozostale rozwiazania nie braly pod uwage faktu, ze uzytkownik na pytanie "Czy na pewno zamknac program?" odpowie nie (exit() zadaje pytanie i zwraca boolean'a)

pozdrawiam

0

eximius, żle się wyraziłem. Chodziło mi o to w czym jest lepsze dispose() dla okna, od exit(0). Sory za wprowadzenie w błąd.

0

tym, ze exitem wylazisz z aplikacji, natomiast dispose() konczy przebieg programu naturalnie. poza tym jesli korzystasz z innych bibliotek, takze musisz pozwalniac zasoby metodami dispose() a nie traktowac wszystko jak siekiera ;)

pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1