2016-11-22 10 views
4

UI画面をlogin.fxmlからhome.fxmlに変更したい。JavaFX:UI画面間をナビゲートするベストプラクティス

StageまたはSceneを変更する必要がありますか?ベストプラクティスが分からないのですか? また、コントローラのハンドラにラムダ式を使用できますか?

+0

[MCVE]を投稿してください。 – DavidS

+0

これまでに試したことを知りたいので、問題を示す例をリクエストしました。これは、あなたが入門チュートリアルや自分のやり方をちょっと試して答えることができると思う質問です。 – DavidS

答えて

7

まず、Stage .vsから始めましょう。 Scene問題: - >Scene - >Nodes(など)Stage

知られているようには、JavaFX階層は基づいています。

はこちらをご覧ください:

enter image description hereは事実上、経験則私の意見では、将来のです:あなたは別のを楽しみに行くことを計画している場合

  • の場所にプログラムの流れ(ログイン - >プロフィールなど)を入力してください - Stageを変更してください。

  • あなたが同じ的環境(初めてのログイン - >複数の間違った試行後のログイン) - である場合Sceneを変更。ラムダについては

:Ahhmmm ...あなたのJava/JavaFX現在のバージョンでは、abillityを持っている場合 - 使用しない理由はありません。 Java 8のコントローラハンドラの詳細は、great tutorialを参照してください。

+0

ありがとう!私はおそらく、私がJavaFXにもっと慣れているときにlambdasを始めて実装しているので、今はOld-Schoolバージョンに固執するでしょう –

0

私はJavaFXでシーンを変更するため、このアプローチを使用する:あなたはボタンをクリックしたときに

/** 
* Controller class for menuFrame.fxml 
*/ 
public class MenuFrameControl implements Initializable { 

    @FXML private Button sceneButton1; 
    @FXML private Button sceneButton2; 
    @FXML private Button sceneButton3; 

    /** 
    * Event handling method, loads new scene from .fxml file 
    * according to clicked button and initialize all components. 
    * @param event 
    * @throws IOException 
    */ 
    @FXML 
    private void handleMenuButtonAction (ActionEvent event) throws IOException { 
     Stage stage = null; 
     Parent myNewScene = null; 

     if (event.getSource() == sceneButton1){ 
      stage = (Stage) sceneButton1.getScene().getWindow(); 
      myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene1.fxml")); 
     } else if (event.getSource() == sceneButton2){ 
      stage = (Stage) flightBtn.getScene().getWindow(); 
      myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene2.fxml")); 
     } else if (event.getSource() == sceneButton3) { 
      stage=(Stage) staffBtn.getScene().getWindow(); 
      myNewScene = FXMLLoader.load(getClass().getResource("/mvc/view/scene3.fxml")); 
     } 

     Scene scene = new Scene(myNewScene); 
     stage.setScene(scene); 
     stage.setTitle("My New Scene"); 
     stage.show(); 
    } 

    @Override 
    public void initialize(URL location, ResourceBundle resources) { } 

だから、基本的に、それは実際にstage変数にStageオブジェクトを表示し保存します。次に、新しいSceneオブジェクトを.fxmlファイルからmyNewScene変数に読み込み、この新しい読み込みSceneオブジェクトを保存したStageオブジェクトに入れます。

このコードでは、単一のStageオブジェクトを使用して、各ボタンが異なるシーンに切り替わる基本的な3つのボタンメニューを作成できます。

関連する問題