在 javaFX 和 Scene Builder 中切换场景时遇到问题
Having trouble switching scenes in javaFX and Scene Builder
我有2个观点:
一个带有按钮 "move to second view",另一个带有标签。
我正在尝试通过单击按钮在两个场景之间切换。
为此我写了如下代码:(Controllerclass是第一个场景的控制器)
public class Controller {
public void switchToSecondScene(ActionEvent event) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("sample2.fxml"));
Scene scene = new Scene(root);
Stage window = (Stage)((Node)event.getScene().getWindow());
window.setScene(scene);
window.show();
}
}
问题是编辑器告诉我它无法解析方法 getScene()
。
我该如何解决这个问题?
转换为 class 的工作原理,您可以在它前面的括号中添加要转换的对象。
返回的结果被转换为括号之间的东西
// Simple casting, otherThing gets cast to Foo
var something = (Foo)otherThing;
// Whatever is returned by getThing() gets cast to Foo
var something = (Foo)otherThing.getThing();
// Whatever is returned by makeThing() gets cast to Foo
var something = (Foo)otherThing.getThing().makeThing();
简而言之,在此示例中,无论您想要分配给变量的是什么,都会被转换成您想要转换到的对象。
因此,如果我们用这种逻辑剖析您的代码:
(Stage)((Node)event.getScene().getWindow());
// assigning to individual variables.
Node window = (Node)event.getScene().getWindow();
Stage stage = (Stage)window;
因此,无论 getWindow()
返回什么,您都可以投射到舞台上。这不是你想要的逻辑。此外,您还缺少代码中的一个重要步骤。您需要先在事件对象上调用 getSource()
。
event.getSource()
returns 一个 Node
对象(希望防弹在投射前做一个 instanceof 检查)。
Node
对象使您可以访问所需的方法。
final Node source = (Node)event.getSource();
final Stage stage = (Stage)source.getScene().getWindow();
在层层转换时尝试将变量分配给它们自己的类型,以帮助您推导逻辑并查找错误。当你嵌套演员时,它会变得一团糟。与上面的两个相比,看看正确实施后代码的工作一个衬里。哪个更清楚?:
(Stage)(((Node)event.getSource()).getScene().getWindow());
我有2个观点:
一个带有按钮 "move to second view",另一个带有标签。
我正在尝试通过单击按钮在两个场景之间切换。
为此我写了如下代码:(Controllerclass是第一个场景的控制器)
public class Controller {
public void switchToSecondScene(ActionEvent event) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("sample2.fxml"));
Scene scene = new Scene(root);
Stage window = (Stage)((Node)event.getScene().getWindow());
window.setScene(scene);
window.show();
}
}
问题是编辑器告诉我它无法解析方法 getScene()
。
我该如何解决这个问题?
转换为 class 的工作原理,您可以在它前面的括号中添加要转换的对象。
返回的结果被转换为括号之间的东西
// Simple casting, otherThing gets cast to Foo
var something = (Foo)otherThing;
// Whatever is returned by getThing() gets cast to Foo
var something = (Foo)otherThing.getThing();
// Whatever is returned by makeThing() gets cast to Foo
var something = (Foo)otherThing.getThing().makeThing();
简而言之,在此示例中,无论您想要分配给变量的是什么,都会被转换成您想要转换到的对象。
因此,如果我们用这种逻辑剖析您的代码:
(Stage)((Node)event.getScene().getWindow());
// assigning to individual variables.
Node window = (Node)event.getScene().getWindow();
Stage stage = (Stage)window;
因此,无论 getWindow()
返回什么,您都可以投射到舞台上。这不是你想要的逻辑。此外,您还缺少代码中的一个重要步骤。您需要先在事件对象上调用 getSource()
。
event.getSource()
returns 一个 Node
对象(希望防弹在投射前做一个 instanceof 检查)。
Node
对象使您可以访问所需的方法。
final Node source = (Node)event.getSource();
final Stage stage = (Stage)source.getScene().getWindow();
在层层转换时尝试将变量分配给它们自己的类型,以帮助您推导逻辑并查找错误。当你嵌套演员时,它会变得一团糟。与上面的两个相比,看看正确实施后代码的工作一个衬里。哪个更清楚?:
(Stage)(((Node)event.getSource()).getScene().getWindow());