今天我遇到了一些问题,也许你可以解释一下为什么必须这样写。
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
答案 0 :(得分:1)
为什么必须首先通过Stage然后再添加到节点对象?
这不是正在发生的事情。看看括号。您正在调用event.getSource()
并将结果投射到Node
。然后,您在结果getScene()
上的Node
,getWindow()
上调用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
,而不是在现有舞台上设置场景。使用与您想要的实际功能相匹配的代码。