Я делаю игру на Java с помощью libGDX и сейчас работаю над меню параметров. Я сделал ImageButton с помощью Scene2D.ui. Когда кнопка нажата, я хочу, чтобы на экране появилось диалоговое окно JOptionPane. Это работает нормально, пока игра находится в оконном режиме, но если она находится в полноэкранном режиме, за окном появляется диалоговое окно JOptionPane. Как сделать, чтобы он отображался поверх всех окон, даже если одно из них находится в полноэкранном режиме?
Я пробовал использовать этот код, но, похоже, это не имеет никакого значения:
JDialog dialog = new JDialog();
dialog.setAlwaysOnTop(true);
Единственное решение, которое я могу придумать, - это создать собственный диалог, у которого не будет собственного окна, но это потребует много работы и кажется ненужным.
Спасибо!
Просто интересно, есть ли конкретная причина, по которой вы хотите использовать JOptionPane/JDialog вместо того, что предоставляет libgdx?
@ Во-вторых, нет, я просто подумал, что это простое решение.
Я обнаружил, что создание диалога в libgdx похоже на то, как вы это делаете в html. Если вам нужен диалог, просто поместите компонент прямо поверх другого. Если вы смешиваете разные фреймворки, вам всегда приходится иметь дело с некоторыми неожиданными побочными эффектами, такими как проблема, с которой вы столкнулись.
Scene2d даже предоставляет класс диалога, и это работает очень хорошо. Кроме того, он работает на всех платформах.




Используйте JOptionPane, чтобы связать его с родительским фреймом/диалогом. Это первый параметр статических методов, как описано в документации.
Пример:
JOptionPane.showInternalMessageDialog(frame, "information", "information", JOptionPane.INFORMATION_MESSAGE);
Где frame окно JOptionPane должно быть сверху.
Итак, я мог бы делать это неправильно, но когда я попытался использовать dialog.getParent() в качестве фрейма, я получил исключение времени выполнения -> JOptionPane: parentComponent не имеет допустимого родителя
Трудно сказать, почему у вас возникает эта ошибка, не видя Макви
JOptionPane.showInternalMessageDialog(frame, "information", "information", JOptionPane.INFORMATION_MESSAGE);гдеframeокноJOptionPaneдолжно быть сверху. Попробуй это