Java распашные детские окна

Извините за очень простой вопрос, но я ничего не смог найти в сети, возможно, потому, что я не знаю правильных терминов для поиска.

Когда у вас есть настольное приложение, есть много так называемых дочерних окон: одно для опций, одно для «о программе» и так далее. Как сделать их в Java Swing (с инструментами NetBeans - опционально)?

До сих пор я только что создал еще один JFrame и в соответствующем событии открыл его так же, как запускается основная функция, ну, основной JFrame. Но что-то не так с этим методом: когда я закрываю дочернее окно через x в правом верхнем углу, вся программа завершается, как если бы я закрывал главное окно. Вероятно, это связано с тем, что NetBeans автоматически сгенерировал код для x, и я могу найти и изменить его где-нибудь ... но все же у меня есть ощущение, что должен быть более простой способ добавления дочерних JFrames (или JPanels или что-то еще для дочерних окон) ;)


person Sejanus    schedule 17.01.2010    source источник


Ответы (4)


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

Что ж, я бы сказал, что вы на правильном пути. Просто убедитесь, что вы делаете следующее для своих дочерних фреймов:

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Тогда закрытие дочерних окон не закроет все ваше приложение.

ХТХ! ;-)

person missingfaktor    schedule 17.01.2010

Вы имеете в виду диалоговое окно (см. Как создавать диалоги), который вы, вероятно, захотите сделать модальным, чтобы блокировать ввод данных пользователем во все остальные окна программы (см. Обзор диалогов)?

person Pascal Thivent    schedule 17.01.2010
comment
Не совсем. Я имею в виду что-то вроде окна параметров. т.е. Окно настроек Firefox. Если это тоже не называется диалоговым окном. - person Sejanus; 17.01.2010

Перейдите в режим создания фреймов -> выберите свой фрейм -> в свойствах первый вариант. Выберите Dispose on close.

Если вы не видите реквизита: Ctrl + Shift + 7 или Window (in the frame menu) -> Properties

person Martijn Courteaux    schedule 17.01.2010

Если вы создаете фреймы, они не считаются дочерними окнами. Вы не можете установить для них владельца, как для JDialog. Если вы хотите создать еще один JFrame, вам нужно будет установить операцию закрытия

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

вместо

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  

Операция EXIT_ON_CLOSE вызовет System.exit(0); который завершит работу JVM. Просто помните, что если для вашего основного JFrame установлено значение DISPOSE_ON_CLOSE, вы должны убедиться, что все остальные ваши кадры были правильно удалены, иначе он не выйдет, пока они не будут удалены.

person Turing    schedule 17.01.2010
comment
Спасибо всем вам;) Жаль, что я не могу официально принять более одного ответа, все они были полезны :) - person Sejanus; 18.01.2010