2015-08-13 5 views
1

Я написал собственный класс JavaFX, расширяющий Dialog в java fx. Хотя я называю это методом show() из внешнего класса, он должен, как и ожидалось, показывать этап диалога сверху. Это происходит, однако, хотя в диалоговом окне Ubuntu появляется поверх другого главного окна, в Windows он автоматически идет позади. Что вызывает эту разницу? Есть ли способ заставить его работать на обеих платформах? Я уже попробовал requestFocus() и toFront(), все еще не работая.Пользовательский диалог JavaFX скрывается за основным окном

- EDIT -

Кажется, что это работает, как это даже с помощью простого оповещения. Я забыл упомянуть, что я развиваюсь в клипе e (fx) (может быть, это какая-то ошибка здесь?). Я не могу отправить весь код здесь прямо сейчас, но дает простой пример, это что-то вроде этого:

// Example button action code: 
Alert alert = new Alert(AlertType.INFORMATION); 
alert.show(); 

Это все. Запуск в Ubuntu - работает как шарм, запускается в Windows, главное окно Eclipse - это кража фокуса. Единственное, что сработало, это добавить focusListener, в котором - после обнаружения фонового потерянного события он запрашивает фокус с помощью requestFocus(), и сразу после этого он снова обращается к фокусу в Platform.runLater(). Это выглядит не так хорошо (появляется, скрывается, появляется снова), и это небезопасно. Я думаю (как я могу быть уверен, что runLater всегда будет делать то, что я хочу, и когда)

ответ

0

Вы можете установить модальность вашего диалога в APPLICATION_MODAL.

stage.initModality(Modality.APPLICATION_MODAL); 

Docs

+0

К сожалению, это все еще скрывается только на Windows, –

+0

@KrzysiekKucharski Ok, вы можете разместить пример с этой проблемой? Я не могу воспроизвести это прямо сейчас. – eldrior

+0

Yup, я редактировал мой главный вопрос. –

0

Ваш этап должен быть в APPLICATION_MODAL так:

DialogStage.initModality(Modality.APPLICATION_MODAL); 

Кроме того, проверьте "родительского окна" модальность, убедитесь, что это на Window_Modal, как это:

mainStage.initModality(Modality.WINDOW_MODAL); 
0

С Java FX в Java версии 8 - существует метод setAlwaysOnTop().

this.dialog.setAlwaysOnTop(true); 
Смежные вопросы