【问题标题】:How could i disable primary stage when a new stage popup弹出新阶段时如何禁用主阶段
【发布时间】:2016-03-08 07:45:11
【问题描述】:

我有按钮会弹出新阶段,但主要阶段不会禁用它仍然可以单击,所以如何禁用主要阶段。

这是我的舞台和场景代码

private static final Stage stage = new Stage();
    private static final Stage newstage = new Stage();
    /**
     *
     */

    @Override
    public void start(Stage primaryStage) throws Exception {
      Parent root = FXMLLoader.load(getClass().getResource("MainMenu.fxml"));
      Scene scene = new Scene(root);
      scene.getStylesheets().addAll(this.getClass().getResource("background.css").toExternalForm());
      stage.setScene(scene);
      stage.show();
    }

     public void chgScene (String str) throws Exception {
       Parent root = FXMLLoader.load(getClass().getResource(str));
       Scene scene = new Scene(root);
       stage.setScene(scene);
       stage.show();
    }

    public void addStage (String str) throws Exception {
       Parent root = FXMLLoader.load(getClass().getResource(str));
       Scene scene = new Scene(root);
       newstage.setScene(scene);
       newstage.setResizable(false);
       newstage.showAndWait();
    }

    public void clearStage () {
        newstage.close();
    }

如果有任何错误非常抱歉,因为我刚接触 Java,我需要为我的项目创建一个 GUI。感谢您的帮助。

【问题讨论】:

    标签: java javafx javafx-8 fxml scenebuilder


    【解决方案1】:

    你需要添加这个:

     newstage.initModality(Modality.APPLICATION_MODAL);
     newstage.showAndWait();
    

    Modality

    【讨论】:

    • 因为我的 newstage GUI 包含一个处理这个函数的按钮 public void clearStage () { newstage.close(); } 然后,当我在初级阶段重新单击按钮时,出现此错误 一旦阶段设置为可见就无法设置模态
    • @Loong 在调用showAndWait 方法之前需要调用initModality 方法。
    • 您只能在任何Stage 实例上调用initModality 一次。由于您在初始化程序中实例化它并重用相同的实例,因此您应该在仅执行一次的地方调用initModality,例如在start()。你也不应该让它static(这根本没有意义)。
    • @Kachna 我已经通过使用 try 和 catch 的 intiModality 函数解决了我的问题
    • static 表示该字段属于该类,而不是该类的实例。它与其他类的对象的可访问性无关,由publicprivate等控制(使用try - catch构造进行逻辑处理也是错误的。)
    【解决方案2】:

    请注意,initModality() 已损坏,并且在 Linux 平台运行时已存在很长时间。

    modal JavaFX stage initOwner prevents owner from resizing, bug?

    是的,该帖子直接引用 initOwner() 但似乎是对 initModality() 的调用触发了该错误。您可能会浪费大量时间来玩与您需要的行为近似的组合,但似乎没有任何东西可以正常工作。

    【讨论】:

      【解决方案3】:

      JavaFx 有多种属性可供您使用,这取决于开发人员如何根据自己的逻辑进行创作。

      mainPane.setDisabled(true);
      newPane.showAndWait();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-14
        • 2015-08-03
        • 1970-01-01
        • 2012-08-25
        • 1970-01-01
        相关资源
        最近更新 更多