Java качели "детские" окна - PullRequest
6 голосов
/ 17 января 2010

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

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

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

Ответы [ 4 ]

9 голосов
/ 17 января 2010

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

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

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

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

HTH! ; -)

3 голосов
/ 17 января 2010

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

1 голос
/ 17 января 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 затем вы должны убедиться, что все ваши остальные кадры были правильно утилизированы, иначе он не выйдет, пока они не будут.

1 голос
/ 17 января 2010

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

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

...