java - PrimaryStage 无法解析为变量 :, 在其他类中使用时:JavaFX

标签 java javafx

我知道有很多与此特定错误相关的问题,但我找不到适合我的错误的解决方案。

所以我正在做的是创建一个 javaFX 应用程序并使用 Modality 库,以便我可以创建一个始终在主舞台上方打开的子窗口。但是我收到的错误是,由于 PrimaryStageScope 问题,我无法在 initOwner() 函数内设置 PrimaryStage 变量在 SubModal 类的范围之外。

让我写一些代码来让事情变得清楚..

//SubModal Class
class SubModal extends singleModal {

    SubModal()
    {
        Stage subStage1 = new Stage();
        subStage1.setTitle("New Stage1");
        FlowPane root = new FlowPane();
        root.setAlignment(Pos.CENTER);
        Scene scene1 = new Scene(root, 300, 200);
        Button btn2 = new Button("Button: Stage1");
        root.getChildren().add(btn2);
        btn2.setOnAction(eve-> System.out.println("Clicked on Stage 1 Button"));
        subStage1.initOwner(primaryStage);
        subStage1.initModality(Modality.NONE);
        subStage1.setScene(scene1);
        subStage1.show();
    }
}

//SingleModal Class
public class singleModal extends Application {

    public static void main(String[] args) {

        Application.launch(args);
    }

    public void start(Stage primaryStage) {

        primaryStage.setTitle("PrimaryStage");

        FlowPane root = new FlowPane();
        root.setAlignment(Pos.CENTER);
        Scene scene = new Scene(root, 700, 200);
        Button btn = new Button("Open New Stage");
        btn.setOnAction(eve-> new NewStage());
        root.getChildren().add(btn);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

从上面的代码..

subStage1.initOwner(primaryStage);

该特定行显示错误

primaryStage cannot be resolved to a variable

我知道这是因为 PrimaryStage() 在 subModal 类中不可用。

所以我的问题是如何在 JavaFX 中解决这个问题。如何在 SubModal 类中引入 primaryStage 值,以便我可以运行此 Code ErrorFree

最佳答案

对于所需的功能(“创建一个始终在主阶段上方打开的子窗口”),无需扩展 singleModal
这是一个mre演示它:

import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.stage.Modality;
import javafx.stage.Stage;

public class SingleModal extends Application {

    @Override
    public void start(Stage primaryStage)  {

        Stage subStage1 = new Stage();
        subStage1.setTitle("New Stage1");

        Button btn2 = new Button("Button: Stage1");
        FlowPane root2 = new FlowPane();
        root2.setAlignment(Pos.CENTER);
        root2.getChildren().add(btn2);
        btn2.setOnAction(eve-> System.out.println("Clicked on Stage 1 Button"));
        subStage1.initOwner(primaryStage);
        subStage1.initModality(Modality.NONE);
        Scene scene1 = new Scene(root2, 300, 200);
        subStage1.setScene(scene1);

        primaryStage.setTitle("PrimaryStage");
        FlowPane root = new FlowPane();
        root.setAlignment(Pos.CENTER);
        Scene scene = new Scene(root, 700, 200);
        Button btn = new Button("Open New Stage");
        btn.setOnAction(eve->  subStage1.show());
        root.getChildren().add(btn);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}

关于java - PrimaryStage 无法解析为变量 :, 在其他类中使用时:JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59478733/

相关文章:

java - Groovy 如何访问 Java 类的私有(private)方法?

java - Spring 批处理。使用 rollbackFor 调用方法

xml - 如何在 FXML 文件中使用 java 变量?

JavaFX Integer Spinner (IntegerSpinnerValueFactory) 不会将值环绕到最小值

java - sakai cle 中的 iframe 攻击(xss)

java - 测试和继承问题

java - java递归创建树

css - 如何影响 JavaFX 超链接中的行间距?

JavaFX - FXML 文件中的自定义对象

java - 在图像上放置 JavaFX 文本