Удаление и закрытие окон в Java - PullRequest
5 голосов
/ 19 января 2011

Хорошо, так что это может быть глупый вопрос, но я новичок в Java и пытаюсь научить себя правильным вещам, прежде чем развивать какие-то вредные привычки.ночь, которая состояла из пользовательского класса, расширяющего Frame, и пользовательского класса, расширяющего Canvas.Метод main () находится в классе canvas, и я создаю там экземпляр класса frame.Проблема в том, что когда программа обнаруживает событие закрытия окна, я не могу удалить фрейм, потому что, по-видимому, у меня нет возможности получить к нему доступ извне основного метода.И если я попытаюсь определить его вне main (), я не смогу использовать его внутри.В итоге я пропустил dispose () и просто использовал System.exit (0).Это хорошо?Это в основном делает то же самое в любом случае?Или это проблема, которую мне нужно исправить, и если да, есть идеи как?

Большое спасибо за чтение,

Коди

Ответы [ 3 ]

6 голосов
/ 19 января 2011

Ссылку на фрейм можно получить из свойства source события:

class MyWindowListener extends WindowAdapter {

    public void windowClosing(WindowEvent e){
         Frame frame = (Frame) e.getSource();
         frame.dispose();
    }

}

В качестве альтернативы, поскольку это анонимный класс (предположительно), объявленный в конструкторе, вы такжедоступ к включающему экземпляру, так что вы также можете записать его как:

class MyFrameClass extends Frame {
    public MyFrameClass() {
        this.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                 MyFrameClass.this.dispose();
            }
        });
    }
}

Или вы можете сделать его еще проще (поскольку у вашего WindowListener нет собственного метода, называемого dispose):*

public void windowClosing(WindowEvent e){
     dispose();
}
5 голосов
/ 19 января 2011

Не глупый вопрос.Из-за сборщика мусора это не такая большая проблема, однако, бывают случаи, когда вы захотите выполнить некоторую очистку при закрытии окна.Поэтому некоторые предложения:

Событие закрытия окна должно обрабатываться из самого фрейма.Например:

    this.addWindowListener(new WindowAdapter(){
        public void windowClosing(WindowEvent e){
                  //code here to perform as the window is about to close.
         }
        });

И я бы посоветовал вам создать отдельный класс для вашего основного метода, который будет вызывать Frame и т. Д.

0 голосов
/ 30 июля 2013
This is used to  close Jframe  with an event handler.


current Jframe 

public class LoginForm  extends JFrame
{

   LoginForm()
   {
      //Some code for Jframe and its components.
      if(Condition)
        disposewindow();
   }




private void disposewindow()
      {
          WindowEvent closingEvent = new WindowEvent(LoginForm.this,
                                                           WindowEvent.WINDOW_CLOSING);
          Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(closingEvent);

      }



//you can  can use for alternate of dispose()event  and it post some event handler **Closing event** ,

// if we can use  this closing event to open new window with conditions.

//It means closing child window with closing event, get this flag in main window to make main window as Disable or Enable state

}

// В родительском окне @ Override

 public void windowClosing(WindowEvent arg0) {

        // TODO Auto-generated method stub
        this.frame.disable();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...