2つのFXMLファイルとそれらの2つのコントローラー+1つの「メイン」.javaファイルで構成されるJavaFX2.0アプリケーションがあります。
開始時に、FXML1は次のように初期化されます。
public void start(Stage stage) throws Exception {
stage.setTitle("Demo Jabber JavaFX Chat");
Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"),
ResourceBundle.getBundle("fxmlexample.fxml_example"));
Scene scene = new Scene(root, 226, 264);
stage.setScene(scene);
scene.getStylesheets().add("fxmlexample/fxmlstylesheet.css");
stage.show();
}
次に、scene1のボタンがクリックされると、Controller1クラスのイベントハンドラーで、scene1 rootを変更して、ユーザーに新しいGUIビューを表示します。そして、このコントローラーでは、いくつかのオブジェクトを初期化します。たとえば、次のようになります。
public class FXMLExampleController {
//some fields...
private MySuperObject c;
@FXML protected void handleSubmitButtonAction(ActionEvent event) {
//some fields...
c = new MySuperObject(); //here i initialize my object, i'm interested in
try {
c.login(username, password); // some actions with this object, which i need to make.
Scene cc = buttonStatusText.getScene();
Parent root = null;
try {
//changing a scene content...
root = FXMLLoader.load(getClass().getResource("fxml_example2.fxml"),
ResourceBundle.getBundle("fxmlexample.fxml_example"));
} catch (IOException ex) {
Logger.getLogger(FXMLExampleController.class.getName()).log(Level.SEVERE, null, ex);
}
cc.setRoot(root);
}
そして、その後、次のシーンでそのオブジェクトを操作する必要があります。これは、同じクラスの新しいインスタンスではなく、最初の1つのシーンで初期化したオブジェクトである必要があります。
「標準のJava」を使用してこれらすべてを作成する方法は理解していますが、JavaFX+FXMLを使用したこのタスクについては少し混乱しています。