Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > как отловить закрытие формы?


Автор: СерегаГоляков 17.5.2010, 12:12
Нажатием кнопки на одной форме, я вывожу на экран другую MyPanel

Код

class RabFig extends JFrame //класс RabFig наследуется от JFrame (наше окошко)
{
    public RabFig()  //конструктор класса
       {
        add(new MyPanel()); //метод, выводит нашу панельку на экран
        pack();             // пинает менеджер компоновки, дабы он пересчитал позиции 
       }                    //всех вложенных визуальных компонентов
    public static void main()//ф-я MAIN()
       {new RabFig().setVisible(true);}//отображение окна со всеми параметрами
}


А когда я его закрываю виндоусовским крестиком, что происходит?
просто происходит .setVisible(false); ?? - т.к. например значение спидометра меняется даже еси окно закрыто.
И как мне отловить закрытие формы??

Автор: AntonSaburov 17.5.2010, 12:15
Посмотреть метод addWindowListener и сам интерфейс WindowListener. Еще можно глянуть класс WindowAdapter как реализацию интерфейса.

Автор: aleksandy 18.5.2010, 08:59
В конструкторе класса добавь вот это
Код

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Это если тебе не нужно больше ничего делать, просто завершить приложение. Иначе - последовать совету AntonSaburov-а.

Автор: soulcub 20.5.2010, 06:58
Если не уверен, что при удалении окна, сборщик мусора его подотрёт, делай dispose() вручную и будет тебе счастье.
Код

        frame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

        frame.addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                frame.dispose();
            }
        });

Автор: СерегаГоляков 20.5.2010, 10:28
Наверное я неправильно выразился))))

Основное окно открывает одно неосновное кнопкой СТАРТ.

В неосновном прорисовывается вращение фигуры.
Затем, стандартным крестиком  закрываю неосновное.
http://ipicture.ru/Gallery/Viewfull/277777.html
Но у мя в основном окне спидометр все равно измеряет скорость вращения фигуры кот была в неосновном окне, а окно я уже закрыл.
http://ipicture.ru/Gallery/Viewfull/277783.html
Т.е. моя фигура все равно меняет координаты , но уже нигде не прорисовывается(как я понимаю она прорисовывается, но просто
Код
.setVisible(true)
 неосновного окна, изменилось на 
Код
.setVisible(false) 
 после закрытия)


Автор: pathfinder 20.5.2010, 10:43
Как правильно выше было указано в конструкторе добавить setDefaultCloseOperation, только не EXIT_ON_CLOSE а DISPOSE_ON_CLOSE
Код

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);


и дополнительно в WindowListener вырубить таймер, через который(насколько я понимаю) ты крутишь фигуру.

Автор: soulcub 20.5.2010, 15:03
Да, реально, а как ты вращаешь фигуру? Её вращение зависит от фрейма?

Автор: СерегаГоляков 20.5.2010, 17:22
Код

class RabFig extends JFrame //класс RabFig наследуется от JFrame (наше окошко)
{
    public RabFig()  //конструктор класса
       {
        add(new MyPanel()); //метод, выводит нашу панельку на экран
        pack();             // пинает менеджер компоновки, дабы он пересчитал позиции 
       }                    //всех вложенных визуальных компонентов
    public static void main()//ф-я MAIN()
       {new RabFig().setVisible(true);}//отображение окна со всеми параметрами
}




Кнопка из другого окна вызывает void main().
Объект класса MyPanel() создаёт объект класса  Figure и всё.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)