JavaFx:切换场景(父问题)

时间:2016-08-10 14:24:21

标签: javafx

今天我遇到了一些问题,也许你可以解释一下为什么必须这样写。

Parent parent = FXMLLoader.load(getClass().getResource("/fxmlFiles/MainScreen.fxml"));
Scene MainScene = new Scene(parent);
Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
stage.setScene(MainScene);
stage.show();

我想问你这个代码的第3行(切换场景)。 为什么先将Stage转换为Node

为什么我们不能按照以下方式编写它:

Parent parent = FXMLLoader.load(getClass().getResource("/fxmlFiles/MainScreen.fxml"));
Scene MainScene = new Scene(parent);
Stage stage = new Stage(scene);
stage.setScene(MainScene);
stage.show();

Parent只是FXML文件提供的一种布局,对吗? 如果没有,请解释一下它是什么:P

1 个答案:

答案 0 :(得分:1)

  

为什么必须首先通过Stage然后再添加到节点对象?

这不是正在发生的事情。看看括号。您正在调用event.getSource()并将结果投射到Node。然后,您在结果getScene()上的NodegetWindow()上调用Scene,并将Window投放到Stage

代码相当于:

Object source = event.getSource();
Node node = (Node) source ;
Scene scene = node.getScene();
Window window = scene.getWindow();
Stage stage = (Stage) window ;
  

为什么我们不能这样写它:

Parent parent = FXMLLoader.load(getClass().getResource("/fxmlFiles/MainScreen.fxml"));
Scene MainScene = new Scene(parent);
Stage stage = new Stage(scene);
stage.setScene(MainScene);
stage.show();

这有所不同;它会创建一个新的Stage,而不是在现有舞台上设置场景。使用与您想要的实际功能相匹配的代码。