簡體   English   中英

在 javaFX 和 Scene Builder 中切換場景時遇到問題

[英]Having trouble switching scenes in javaFX and Scene Builder

我有 2 個觀點:
一個帶有一個按鈕,上面寫着“移到第二個視圖”,另一個帶有標簽。
我試圖通過單擊按鈕在 2 個場景之間切換。

為此我寫了以下代碼:(Controller類是第一個場景的控制器)

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

我怎樣才能解決這個問題?

轉換到類的工作原理,您將要轉換到的內容添加到它前面的括號中。
返回的結果被強制轉換為括號之間的東西

// 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()返回什么,您都可以將其轉換為 Stage。 這不是你想要的邏輯。 此外,您還缺少代碼中的一個重要步驟。 您需要先在事件對象上調用getSource()

event.getSource()返回一個Node對象(希望在強制轉換之前做一個 instanceof 檢查)。
Node對象使您可以訪問所需的方法。

final Node source = (Node)event.getSource();
final Stage stage = (Stage)source.getScene().getWindow();

嘗試在層級轉換時將變量分配給它們自己的類型,以幫助您推斷邏輯和查找錯誤。 當您嵌套演員表時,它可能會變得一團糟。 與上述兩個代碼相比,當正確實現時,看看您的代碼的一個工作行。 哪個更清楚?:

(Stage)(((Node)event.getSource()).getScene().getWindow());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM