![](/img/trans.png)
[英]How to load scenes created in Scene Builder into JavaFX application main class?
[英]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.