Допълнителен начин за затваряне на диалогов прозорец

Използвам персонализиран JFrame, за да реализирам прост диалогов прозорец в Java приложение, върху което работя.

След като потребителят натисне бутона „Приложи“ в прозореца, той трябва да се затвори.

Какъв би бил най-традиционният начин да направите това? setVisible(false) вътре в класа ли е най-добрият начин? Има ли някакъв по-препоръчителен начин?


person Aviv Cohn    schedule 28.02.2014    source източник
comment
Какво не е наред с JOptionPane или JDialog?   -  person Anirban Nag 'tintinmj'    schedule 01.03.2014
comment
Искате ли да затворите диалоговия прозорец или рамката?   -  person MadProgrammer    schedule 01.03.2014
comment
@MadProgrammer Затворете малък JFrame   -  person Aviv Cohn    schedule 01.03.2014


Отговори (3)


За да затворите прозорец в Swing като JFrame или JDialog имате две възможности.

Обадете се на dispose()

Просто извикайте dispose() метод:

public void dispose()

Освобождава всички ресурси на основния екран, използвани от този прозорец, неговите подкомпоненти и всички негови дъщерни елементи. Това означава, че ресурсите за тези компоненти ще бъдат унищожени, всяка памет, която те консумират, ще бъде върната в операционната система и те ще бъдат маркирани като непоказваеми.

Например:

frame.dispose();
dialog.dispose();

Изпращане на WINDOW_CLOSING събитие

Можете да изпратите ново WindowEvent като това:

frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
dialog.dispatchEvent(new WindowEvent(dialog, WindowEvent.WINDOW_CLOSING));

Ако към прозореца е прикачен WindowListener ще бъде уведомен. Ако операцията за затваряне по подразбиране на рамката (или диалоговия прозорец) е зададена, това действие ще бъде извършено. Възможните близки операции са:

  • DO_NOTHING_ON_CLOSE (дефинирано в WindowConstants): Не правете нищо; изискват програмата да обработва операцията в метода windowClosing на регистриран обект WindowListener.
  • HIDE_ON_CLOSE (дефинирано в WindowConstants): Автоматично скриване на рамката след извикване на всички регистрирани WindowListener обекти.
  • DISPOSE_ON_CLOSE (дефинирано в WindowConstants): Автоматично скриване и изхвърляне на рамката след извикване на всички регистрирани WindowListener обекти.
  • EXIT_ON_CLOSE (дефинирано в JFrame и не налично за JDialog): Излезте от приложението чрез метода за изход от системата. Използвайте това само в приложения.
person dic19    schedule 28.02.2014
comment
Благодаря :) За тази цел просто ще използвам dispose(). - person Aviv Cohn; 01.03.2014
comment
+1 но dispose() == setVisible(false) в случай, че /ако има един JFrame/JDialog/JWindow вече видим на екрана (може да се скрие от setVisible(false)), имайте предвид, че в противен случай има последно завъртане на светлините, последното прекратява текущата JVM - person mKorbel; 01.03.2014

Зависи какво се опитвате да постигнете. Задаването на прозореца на невидим просто ще го скрие, но той все още ще работи във фонов режим (JFrame/InternalFrame). Можете да използвате JDialog (вижте JOptionPane като пример), за да създадете временни рамки, които са наистина затворени, когато щракнете върху един от бутоните. Можете също да извлечете избраната опция, когато потребителят затвори прозореца (тук: Javadoc). Можете също така принудително да затворите прозорец, като задействате събитие, за да го затворите, като така:

Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(
                    new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)
             )

Вътре в actionlistener например.

person schwarz    schedule 28.02.2014

Има множество операции, които могат да бъдат извършени, когато затворите JFrame.

Да предположим, че имате JFrame

JFrame frame = new JFrame();

Този излиза от JVM, когато е затворен.

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Този просто скрива JFrame.

frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

Този изхвърля JFrame.

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Когато последният показваем прозорец във виртуалната машина на Java (VM) бъде премахнат, VM може да прекрати работа

И по подразбиране не се прави нищо.

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
person Kedarnath Calangutkar    schedule 28.02.2014