在 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());