1
ここにコントローラが2つあります。authcontroller
とmaincontroller
です。メソッドレジスタは新しいウィンドウを開きます - 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
それがこれを行うには悪い考えです。 initializeメソッドで 'Window'を取得している場合、シーンに追加される' tabOnePane'とそのシーンがウィンドウに追加されます。これにより、コードを維持するのが難しくなります。あなたは、コントローラクラスの外側からそのステージでやっていることを何でもする方法を見つけるべきでしょう。とにかくfxmlの読み込みを完了する前に、どのように 'tabOnePane'をシーンに追加することができましたか? – fabian
fx:idを使ってfxml-fileからtabOnePaneを追加しました。残念ながら、私はそのクラスでこのステージを使用する必要があります。なぜなら、後で2クラスで使うプロパティを私に与えるからです。 – Artificial