2016-11-17 17 views
1

ここにコントローラが2つあります。authcontrollermaincontrollerです。メソッドレジスタは新しいウィンドウを開きます - register.fxml。私は最初のウィンドウからStageを取得しようとするところJavafxステージがnull

register.setOnAction(new EventHandler<ActionEvent>() { 
      public void handle(ActionEvent event) { 
       Stage stage = new Stage(); 
       AnchorPane pane = null; 
       try { 
        pane = FXMLLoader.load(getClass().getResource("/fxml/register.fxml")); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

       stage.setTitle("Регистрация в системе"); 
       Scene scene = new Scene(pane, 600, 450); 
       stage.setResizable(false); 
       stage.setScene(scene); 
       stage.show(); 
      } 
     }); 

した後、第2のコントローラで、私は方法を持っているが、初期化します。

@Override 
    public void initialize(URL location, ResourceBundle resources) { 
    Stage stage = (Stage) tabOnePane.getScene().getWindow(); 

} 

tabOnePaneは、第2ウィンドウのタブ区です。しかし、私がこれをしようとすると、私のStageは常にnullです。しかし、別のハンドルメソッドの中にStageを入れようとすると、私はそれを行うことができます。私の2番目のウィンドウがロードされたときに最初のウィンドウのStageを得る方法?

第二のコントローラは、インタフェースInitializable

+1

それがこれを行うには悪い考えです。 initializeメソッドで 'Window'を取得している場合、シーンに追加される' tabOnePane'とそのシーンがウィンドウに追加されます。これにより、コードを維持するのが難しくなります。あなたは、コントローラクラスの外側からそのステージでやっていることを何でもする方法を見つけるべきでしょう。とにかくfxmlの読み込みを完了する前に、どのように 'tabOnePane'をシーンに追加することができましたか? – fabian

+0

fx:idを使ってfxml-fileからtabOnePaneを追加しました。残念ながら、私はそのクラスでこのステージを使用する必要があります。なぜなら、後で2クラスで使うプロパティを私に与えるからです。 – Artificial

答えて

0

コントローラでinitializeメソッドでステージへの最初のあなたは決してカントのアクセスを実装しています。 目はちょうどそのコントローラに、ステージを渡すために、このようFXMLロードsetStage(ステージSTGE)のように、コントローラにメソッドを追加します。

FXMLLoader loader = new FXMLLoader(); 
    loader.setLocation(getClass().getResource("/root/mainGui.fxml")); 
    Parent root = loader.load(); 
    Scene scene = new Scene(root, 500, 400); 
    controllerInterface ctrl = loader.getController(); 
    ctrl.setStage(primaryStage); 
関連する問題