Как сделать всплывающее окно в javafx

Добавил пользователь Евгений Кузнецов
Обновлено: 18.09.2024

У меня в приложении есть JavaFX Popup . И когда какое-либо из этих всплывающих окон закрывается, мне нужно, чтобы оно отображалось поверх всех остальных всплывающих окон, независимо от его индекса в Window.getWindows() .

Я пробовал вызвать такой метод, как toFront , но его нет в классе Popup . Я также пытался изменить индекс сфокусированного Popup в Window.getWindows() , но это тоже не сработало, потому что я не знаю, как поменять местами индекс двух элементов в ObservableList .

например

Скажем, у меня есть два Popup с именами p1 и p2 , и в каждом из них есть узлы n1 и n2 соответственно, которые используются для перемещения этих всплывающих окон, поэтому всякий раз, когда перетаскивают n1 , p1 должен быть наверху, а когда перетаскивается n2 , p2 должен выходить на первое место.

Вот мой минимальный пример:

Так как же решить эту проблему?

@nicomp, я спросил, как вывести любое всплывающее окно на передний план, когда есть много всплывающих окон, а не как сфокусировать / расфокусировать, потому что, если я хочу проверить, сфокусировано ли всплывающее окно или нет, я добавлю событие нажатия мыши на узел Я использую всплывающее окно, чтобы сделать всплывающее окно подвижным. т.е. фокус здесь не проблема.

enter image description here

Я хочу создать всплывающие окна в javafx application.give. Мне нужна идея.

когда я нажимаю кнопку проверки, открываю всплывающие окна. как это сделать?

Вы можете либо создать новый Stage , добавить в него свои элементы управления, либо если вам нужен POPUP как Dialog , то вы можете использовать DialogsFX или ControlsFX (требуется JavaFX8)

Для создания нового этапа вы можете использовать следующий фрагмент

Если вы не хотите, чтобы он был modal (заблокируйте другие окна), используйте:

Класс Popup может быть лучше, чем класс Stage, в зависимости от того, что вы хотите. Этап либо модальный (вы не можете нажимать на что-либо еще в своем приложении), либо он исчезает, если вы щелкните в другом месте вашего приложения (потому что это отдельное окно). Всплывающее окно остается сверху, но не модально.

Я хочу нажать кнопку, чтобы появилось всплывающее окно с элементом tableview внутри него. Кто-нибудь может сказать мне, как это сделать?

задан 10 мая '12, 06:05

2 ответы

Это код простого всплывающего окна в JavaFX. Надеюсь это поможет.


Какое всплывающее окно вам нужно? Реализовано с использованием нового Stage or Popup контроль? В JavaFX есть элемент управления Popup. Прочтите о нем, чтобы узнать, соответствует ли он вашим потребностям. Точка входа для версии Stage может быть Диалог с кнопкой ЗАКРЫТЬ.

ответ дан 10 мая '12, 13:05

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

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками javafx-2 or задайте свой вопрос.

Окна являются основой пользовательского интерфейса любой операционной системы. Они визуально разделяют выполняемые в среде приложения. Окна, используемые в библиотеке Swing, мало чем отличаются от окон библиотеки AWT, которые представляют собой окна операционной системы.

Все окна библиотеки Swing — а к ним относятся окно без рамки JWindow, окно с рамкой JFrame и диалоговое окно JDialog — являются исключением из правила, согласно которому все компоненты Swing представляют собой легковесные компоненты и унаследованы от базового класса JComponent. Окна Swing являются тяжеловесными контейнерами для размещения в них легковесных компонентов, которые операционная система не видит.

Наиболее полезные JFrame методы

Окно JWindow

Класс JWindow представляет собой окно без рамки и без элементов управления, предназначенных, к примеру, для его закрытия или перемещения. Данный тип окна дает минимальные возможности по своей настройке, в отличие от чаще всего используемого окна JFrame. Окно без рамки не часто требуется в программах. Однако в отдельных случаях оно может быть полезно, особенно в тех случаях, когда необходимо ненадолго вывести на экран какую-либо информацию типа заставки программы или подсказку для пользователя, и управлять окном с этой информацией не нужно.

Окна JWindow используются всплывающими меню JPopupMenu в тех ситуациях, когда в окне приложения не хватает места для размещения легковесного компонента в слое POPUP_LAYER многослойной панели, где всплывающие меню располагаются по умолчанию. В такой ситуации вместо легковесного компонента создается небольшое окно без рамки JWindow, которое можно разместить в любом месте экрана, потому что оно принадлежит операционной системе. В этом окне и размещается всплывающее меню.

Рассмотрим пример JWindowTest. Основная идея использования окна без рамки JWindow заключается в копировании части "изображения рабочего стола" в окно приложения. Благодаря появившемуся в пакете JDK 1.3 классу Robot можно "снимать" экранную копию рабочего стола.

Пример JWindow

В этом примере приложение наследуем от окна JWindow, чтобы удобнее вызывать методы этого класса и добавлять в окно компоненты. Объект Robot необходимо создавать в блоке try . catch, т.к. его создание может быть запрещено менеджером безопасности, используемым виртуальной машиной Java. Впрочем, нам нарушение безопасности не грозит, потому что мы создаем отдельное приложение, а не апплет.

Вырезаем часть изображения "рабочего стола" методом createScreenCapture() в стороне он местоположения нашего окна. Затем в панель содержимого окна добавляется компонент ImageDraw, который и отображает вырезанное изображения рабочего стола. После вывода окна на экран программа засыпает на 10 секунд, а потом заканчивает свою работу.

Скриншот рабочего стола с интерфейсом окна примера JWindow представлен на следующем рисунке.


Следует также отметить, что с помощью конструктора без параметров создается окно JWindow, неспособное получать фокус ввода. Чаще всего именно такое поведение необходимо (ведь панелям инструментов, всплывающим заставкам и меню фокус ввода не нужен). При необходимости получения фокуса ввода, используйте метод setFocusableWindowState(true).

Окно JFrame

  • наличие рамки, которая позволяет изменять размер окна;
  • наличие заголовка с названием приложения (заголовок может быть пустым);
  • возможность использования системного меню, позволяющее проводить манипуляции с окном и приложением;
  • наличие кнопок управления для закрытия и свертывания окна.

Для размещения компонентов пользовательского интерфейса в подавляющем большинстве приложений применяется класс JFrame. Разработчики Swing определили специальный метод закрытия окна setDefaultCloseOperation, существенно упрощающий эту операцию. Рассмотрим простой JFrame пример (JFrameWindowListener) с обработкой события закрытия окна.

JFrame пример

В примере создается окно JFrame с определением заголовка в конструкторе базового класса. Для определения титульной строки окна можно также использовать метод setTitle() класса JFrame.

Прежде чем задать размеры окна и отобразить его на экране, вызывается метод setDefaultCloseOperation(). Данный метод позволяет указать, какое действие будет произведено при предварительной обработке события processWindowEvent() перед закрытием окна. По умолчанию используется константа HIDE_ON_CLOSE, убирающая окно с экрана при его закрытии. Можно использовать значение EXIT_ON_CLOSE, которое указывает, что при закрытии окна необходимо закончить работу приложения.

В примере методу setDefaultCloseOperation передается константа DO_NOTHING_ON_CLOSE - ничего не делать при закрытии окна. К окну JFrame подключается слушатель и обработка события закрытия окна выполняется в методе windowClosing. Алгоритм обработки построен таким образом, что окно закрывается при третьей попытке. Номер попытки отображается в метке интерфейса.

Скриншот рабочего стола с интерфейсом окна нашей программы представлен на следующем рисунке.


Для определения иконки окна необходимо использовать метод setIconImage(). Иконка располагается на кнопке свернутого окна или в заголовке окна в нормальном состоянии.

События окон, WindowListener, WindowFocusListener

Окна Swing (JWindow, JFrame, JDialog) поддерживают два типа событий :

  • WindowListener - позволяет узнать об изменениях в состоянии окна;
  • WindowFocusListener - сообщает о получении или потере компонентами окна фокуса ввода

Полный список методов данных слушателей можно найти в интерактивной документации Java.

В интерфейсе слушателя WindowListener чаще остальных применяют метод windowClosing, вызываемый системой событий при закрытии окна. Рассмотренный выше пример наглядно демонстрирует это.

К фрейму JFrame можно подключить слушателя окна, созданного на основе WindowAdapter (чтобы не реализовывать все определенные в интерфейсе WindowListener методы) и переопределить метод windowClosing, как это представлено в следующих строках кода :

При выходе из программы открывается диалоговое окно в панели JOptionPane и у пользователя спрашивается подтверждение, действительно ли он желает закончить работу с приложением. Если ответ положительный, то программа завершает работу.

Диалоговое окно JDialog

Диалоговые окна чаще всего используются в приложениях для получения дополнительной информации с целью установки параметров приложения, вывода важной вспомогательной/отладочной информации. Диалоговые окна, как правило, создаются модальными (modal), блокирующими доступ к остальным окнам приложения, пока пользователь не закончит работу с модальным диалоговым окном. Модальные диалоговые окна располагаются поверх основного окна приложения. Внешний вид диалоговых окон мало отличается от окон с рамкой JFrame, но обычно у них меньше элементов управления окна (чаще всего, имеется только кнопка закрытия окна) и отсутствует системное меню.

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

JDialog пример создания диалоговых окон

В примере создаем окно с рамкой JFrame, в панели содержимого которого размещается две кнопки JButton. По нажатию на кнопки создаются диалоговые окна в отдельном методе createDialog(). Диалоговое окно с заданным заголовком JDialog может быть модальным и немодальным. Программа позволяет создать несколько немодальных окон одновременно, но только одно модальное. Немодальные окна не блокируют работу с основным окном приложения. При закрытии диалогового окна используется константа DISPOSE_ON_CLOSE, удаляющую окно после закрытия.

Интерфейс работы примера JDialog представлен на следующем скриншоте.


Библиотека Swing предоставляет набор стандартных диалоговых окон JDialog для получения и вывода несложной информации. Прежде чем создавать собственное диалоговое окно, следует рассмотреть возможность использования стандартного.

Оформление окон

Сейчас создание различных интерфейсов окон возможна благодаря усовершенствованиям в UI-представителе корневой панели JRootPane. UI-представитель позволяет создавать специальные рамки, заголовок, системное меню и кнопки управления окном, и размещать их в корневой панели нужным образом, используя специализированный менеджер расположения. Менеджер расположения контролирует пространство корневой панели. Кроме этого, при новом оформлении окон отключаются системные элементы окна.

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

Пример оформления окон : JDialog decoration

В примере создается простое окно с рамкой и диалоговое окно. Перед создания окон вызывается метод setDefaultLookAndFeelDecorated(), означающий, что для создаваемых окон JFrame и JDialog потребуется специальное оформление. Далее определяются размеры окон и они выводятся на экран.

Интерфейс примера окон, оформленных с внешним видом Metal, представлен на следующем скриншоте.


Специальное оформление окон может быть полезно как средство, позволяющее полностью, вплоть до окон, управлять внешним видом вашего приложения. Создав собственного UI-представителя корневой панели, можно придать своему приложению уникальный вид, легко узнаваемый пользователями.

Исходные коды примеров, рассмотренных в тексте страницы, можно скачать здесь (3.54 Кб).

Как сделать всплывающее окно в java

В настоящее время я разрабатываю Java-приложение.

Я хочу показать новое окно, содержащее текстовую область и кнопку.

Есть ли у вас какие-либо идеи?

  • 4 Может быть JOptionPane.showInputDialog(null, 'This is the message', 'This is the default text') ?
  • 1 Отметьте ответ, чтобы этот вопрос был решен.
  • 1 @Ungeheuer Новичков нельзя учить, они не понимают слов, которые вы произносите.
  • @NoName, наверное, нет. Он тоже все еще активен . в последний раз видел 6 марта. Некоторое время назад, но все же.

Тот же ответ: JOptionpane с примером :)


Хм, прошло немного времени, но насколько я помню .
Если вам нужно настраиваемое окно, вы можете просто создать новый фрейм и заставить его отображаться так же, как в главном окне. В Java также есть отличная библиотека диалогов, которую вы можете проверить здесь:

Как делать диалоги

Это может дать вам желаемую функциональность с гораздо меньшими усилиями.

Если вы не хотите ограничивать выбор пользователя, вы можете либо использовать форму метода showInputDialog, которая принимает меньше аргументов, либо указать null для массива объектов. В стиле Java замена возможных значений на null приводит к появлению диалогового окна с текстовым полем, которое выглядит следующим образом:

  • Думаю, я хочу сделать новую рамку. Можете ли вы показать мне, как это сделать, спасибо, кстати?
  • Пример, который я привел выше, настолько ясен и краток, насколько я могу показать вам, как это сделать. Если вы хотите настроить его за пределами примера, взгляните на Java Docs.

Ознакомьтесь с диалоговыми окнами Swing (в основном ориентированными на JOptionPane, как упомянул @mcfinnigan).

Читайте также: