2016-08-10 18 views
0

今日、私はいくつかの問題に出くわしました。JavaFx:シーンを切り替える(親の問題)

​​

このコードの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ファイルが提供するレイアウトのですか? 私はそれがexacly何かを教えてください:P

+0

私はそのイベントが呼び出されているのを見なければならないでしょうが、これはシーンを切り替えるには非常に複雑すぎる方法です。同じステージを維持している場合は、ステージ上のシーンを切り替えるだけです。あなたが新しいステージを望むなら、あなたが示した第2の方法で行ってください。 – Dominic

答えて

1

なぜステージで最初にキャストされる必要がありますし、次にノードオブジェクトにする必要がありますか?

これは起こっていないことです。かっこを見てください。あなたはevent.getSource()に電話し、その結果をNodeにキャストしています。その結果をNodeに、getWindow()Sceneとし、WindowStageにキャストします。

Object source = event.getSource(); 
Node node = (Node) source ; 
Scene scene = node.getScene(); 
Window window = scene.getWindow(); 
Stage stage = (Stage) window ; 

なぜ我々だけの道をfllowingそれを書くことができません:

コードは同等です

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を作成します。実際の機能に合ったコードを使用してください。

+0

オキー、分かります。したがって、event.getSource()関数を使用している場合、どのような種類のデータが得られますか?なぜ我々は強制的にキャスティングを使用するのですか? – Michael

+0

[Javadocs](https://docs.oracle.com/javase/8/docs/api/java/util/EventObject.html?is-external=true#getSource--)を参照してください。 'getSource'は' Object'を返します。ソースは任意のオブジェクトであってもよい。 –

+0

Okey、今私は混乱している; P。ノードは、典型的にはモデルオブジェクトをラップし、人間が読める名前、アイコンなどを提供する、プレゼンテーションオブジェクトであり、アクション、プロパティ、ローカライズされた表示名を持っています。オブジェクトをObjectにキャストする必要がある理由:(私は理解できません) – Michael

関連する問題