具有模态的舞台隐藏最大化按钮

当我设置舞台的模式时,它会隐藏最大化按钮


Stage stage = new Stage();

stage.setScene(new Scene((Parent) controller.getViewNode()));

stage.initStyle(StageStyle.DECORATED);


stage.setResizable(true);

stage.setIconified(false);


stage.initModality(Modality.APPLICATION_MODAL);

stage.initOwner(window);

所以我希望舞台是一个模态,但也显示最大化按钮,但不会发生什么。顺便说一句,我正在使用 Ubuntu。我已经进行了搜索,但我只找到了如何删除最大化按钮


杨__羊羊
浏览 71回答 1
1回答

繁华开满天机

我也遇到同样的情况。如果我尝试最大化使用stage.setMaximized(true);它不起作用,最大化按钮也不显示。我正在研究这个问题,但根本没有答案。这是我在这里发现的第一个类似问题。我在用着:操作系统:GNU/Linux发行版:ManjaroLinux 核心:5.3.6-1来自:侏儒。Java版本:OpenJDK 12.0.1JavaFX 版本: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窗口,但用户无法与其节点交互。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java