Java/LibGDX отображают JOptionPane перед полноэкранным окном

Я делаю игру на Java с помощью libGDX и сейчас работаю над меню параметров. Я сделал ImageButton с помощью Scene2D.ui. Когда кнопка нажата, я хочу, чтобы на экране появилось диалоговое окно JOptionPane. Это работает нормально, пока игра находится в оконном режиме, но если она находится в полноэкранном режиме, за окном появляется диалоговое окно JOptionPane. Как сделать, чтобы он отображался поверх всех окон, даже если одно из них находится в полноэкранном режиме?

Я пробовал использовать этот код, но, похоже, это не имеет никакого значения:

JDialog dialog = new JDialog();
dialog.setAlwaysOnTop(true);

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

Спасибо!

JOptionPane.showInternalMessageDialog(frame, "information", "information", JOptionPane.INFORMATION_MESSAGE); где frame окно JOptionPane должно быть сверху. Попробуй это
Leonardo Alves Machado 09.07.2019 20:10

Просто интересно, есть ли конкретная причина, по которой вы хотите использовать JOptionPane/JDialog вместо того, что предоставляет libgdx?

second 09.07.2019 20:34

@ Во-вторых, нет, я просто подумал, что это простое решение.

ILikeJava 09.07.2019 21:34

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

second 09.07.2019 21:38

Scene2d даже предоставляет класс диалога, и это работает очень хорошо. Кроме того, он работает на всех платформах.

MrStahlfelge 10.07.2019 21:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
180
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте JOptionPane, чтобы связать его с родительским фреймом/диалогом. Это первый параметр статических методов, как описано в документации.

Пример:

JOptionPane.showInternalMessageDialog(frame, "information", "information", JOptionPane.INFORMATION_MESSAGE);

Где frame окно JOptionPane должно быть сверху.

Итак, я мог бы делать это неправильно, но когда я попытался использовать dialog.getParent() в качестве фрейма, я получил исключение времени выполнения -> JOptionPane: parentComponent не имеет допустимого родителя

ILikeJava 09.07.2019 21:36

Трудно сказать, почему у вас возникает эта ошибка, не видя Макви

Leonardo Alves Machado 10.07.2019 19:55

Другие вопросы по теме