如何在JavaFX中将场景添加到堆栈窗格

时间:2015-05-21 08:48:16

标签: javafx-8

我想在stackpane中创建一个场景,所以我只是使用了这一块 代码

StackPane vb = new StackPane();
Scene scene  = new Scene(vb);
vb.getParent().add(scene);

但它显示的错误类似于The method add(Scene) is undefined for the type Parent

有人可以建议我在堆叠窗格中添加场景吗?

2 个答案:

答案 0 :(得分:1)

  

类型为Parent的方法add(Scene)未定义。

在Parent中没有任何类型参数的add方法。不确定你的意思。

来自Scene类的Javadoc:

  

JavaFX Scene类是场景中所有内容的容器   曲线图。

Scene不会扩展Node,因此无法添加到其他节点。它的目的是成为舞台的轻量级部分。

分页: 你可以:

  • 更改舞台的场景
  • 更改场景的根节点
  • 更改窗格的内容(例如BorderPane的中心)

我认为对于分页,第3个选项最适合,因为您可能希望在分页时保留标题(菜单,工具栏,...)和页脚(状态栏,...)。

答案 1 :(得分:1)

我发现了一个更好的解决方案:将您的root添加到StackPane,然后将其添加到场景中。

像您自己一样,我试图在彼此之间添加多个场景。您正在做的问题是Scene无法添加到任何内容。

所以,相反:

    // Create your StackPane to put everything in
    StackPane stackPane = new StackPane();

    // Create your content
    // ... Ellipse
    Ellipse ellipse = new Ellipse(110, 70);
    ellipse.setFill(Color.LIGHTBLUE);

    // ... Text
    Text text = new Text("My Shapes");
    text.setFont(new Font("Arial Bold", 24));

    // ... GridPane
    Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));

然后将它们全部一起添加到StackPane中,然后将StackPane添加到场景中。

    // add all
    // now all my content appears on top of each other in my stackPane
    // Note: The order they stack is root -> ellipse -> text
    stackPane.getChildren().addAll(root, ellipse, text); 

    // make your Scene
    Scene scene = new Scene(stackPane, 300, 275, Color.BLACK);

    // finalize your stage
    primaryStage.setScene(scene);
    primaryStage.show();