То же самое происходит со мной. Если я попытаюсь максимизировать, используя
stage.setMaximized(true);
, это не сработает, и кнопка максимизации не отображается. Я исследую это, но ответа нет вообще. Это первый подобный вопрос, который я нашел здесь. Я использую:
- ОС: GNU / Linux
- Дистрибутив: Manjaro
- Linux Core: 5.3.6-1
- DE:Gnome.
- Версия Java: OpenJDK 12.0.1
- Версия JavaFX: OpenJFX 12.0.1 (сборка глюона).
ОБНОВЛЕНИЕ: Официальная документация гласит:
Обратите внимание, что показ модального этапа не обязательно блокирует вызывающего.
Итак, я решил решить эту проблему с помощью EventHandler. Я создал вспомогательный класс, который позаботится об этом.
import javafx.event.Event;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
/**
* This is a utility class to create a Widow Event handler
* in such way that when a child window shows, a parent (owner)
* stage get locked; and when the child window hides, the parent
* stage get unlocked.
*
* @author David Vidal
* @version 1.0
* @since 1.0
*/
public final class WindowsModality {
/*=================*
* Private fields. *
*=================*/
/**
* The parent stage.
*/
private final Stage owner;
/*===============*
* Constructors. *
*===============*/
/**
* Initialize an instance with given parameters.
*
* @param owner parent stage.
* @param child child stage.
*/
public WindowsModality(Stage owner, Stage child) {
this.owner = owner;
child.addEventHandler(WindowEvent.WINDOW_HIDDEN, this::childHidden);
child.addEventHandler(WindowEvent.WINDOW_SHOWN, this::childShown);
}
/*==================*
* Implementations. *
*==================*/
/**
* Implementation of functional interface EventHandler,
* used to know when the child window is closed/hidden.
*
* @param event from {@link javafx.event.EventHandler#handle(Event)}
*/
private void childHidden(WindowEvent event) {
if (!event.isConsumed()) {
owner.getScene().getRoot().setDisable(false);
}
}
/**
* Implementation of functional interface EventHandler,
* used to know when the child window is shown.
*
* @param event from {@link javafx.event.EventHandler#handle(Event)}
*/
private void childShown(WindowEvent event) {
if (!event.isConsumed()) {
owner.getScene().getRoot().setDisable(true);
}
}
}
И затем я просто добавил следующий код:
public void showAnotherStage(){
//(Create and setup the new stage and scene)
new WindowModality(primaryStage, newStage);
newStage.show();
//Do something else.
}
Это было мое решение, проверено и работает нормально,Когда отображается дочернее окно (newStage), владелец (primaryStage) отключается, поэтому, несмотря на то, что пользователь может активировать окно primaryStage, пользователь не может взаимодействовать с его узлами.
Я надеюсь, что это то, чем вы былинаходясь в поиске. Привет!