2017-10-14 7 views
0

私は以下のコードを使用して情報を渡していますが、私は他の方法を知りたいと思います。 FXMLDocumentControllerのイベントハンドラメソッドhandleSubmitButtonActionでは、MainFXMLファイルをロードする別のウィンドウを作成します。その後、私はそのコントローラを手に入れ、私の情報をメインウィンドウに送ります。それを行う良い方法はありますか?JavaFXのウィンドウ間で情報を渡す最善の方法はどれですか?

public class FXMLDocumentController implements Initializable { 

    @FXML 
    private TextField user; 

    @FXML 
    public void handleSubmitButtonAction(ActionEvent event) throws IOException { 
     Alert dialogo = new Alert(Alert.AlertType.INFORMATION, "User: " + user.getText() + " logged in."); 
     dialogo.showAndWait(); 
     Stage stage2 = (Stage) user.getScene().getWindow(); 
     stage2.close(); 

     FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MainFXML.fxml"));   
     Parent root = (Parent) fxmlLoader.load(); 
     MainFXMLController controller = fxmlLoader.<MainFXMLController>getController();   

     Scene scene = new Scene(root); 
     Stage stage = new Stage(); 
     stage.setScene(scene); 
     stage.show(); 

     controller.setUser(user.getText());   
    } 
+0

アプリケーションをMVCの意味でシングルトンインスタンスの「コントローラ」として使用しますか?可愛いわけではありませんが、FXコントローラーのクラスを切り離します。 –

+0

私は、どちらが最善の方法であるかを知りたいと思います。すべてのjavafxアプリケーションは、その性質上、fxmlファイルのためMVCです。 –

+0

ベスト・ウェイは単なる意見です。誰もが異なる意見を持つことができます。だから、あなたはさまざまな意見に基づいて多くの異なる答えを得ることができ、あなたは最善の方法を決定することに近づくことはありません。とにかく、大規模なアプリケーションの場合、IMOは、[Gluon Ignite](http://gluonhq.com/labs/ignite/)のような依存性注入メカニズムを使用して、注入されたオブジェクトにJavaFX Beanに観測可能なプロパティを作成させ、プロパティの変更をバインドまたはリッスンします。しかし、一方で、あなたの質問にある解決策があなたのために最適かもしれません、あなたが決定します。 – jewelsea

答えて

1

短い回答を得ようとしています。

私が行うことは、コントローラクラスの「アプリケーションモデル」を作成することです。もちろん、アプリケーションモデルのルートは、Applicationクラスのコントローラです。アプリケーションモデルは、これらの部品は、独自のウィンドウを持つことができますが、それらは必ずしもありませEclipseのように、彼らがすることもでき

public abstract class Part { 
     public final ObservableMap<String, ActionHandler> getActionHandlers() {...}  
     public final ObservableBooleanValue closableProperty() {...} 
     public final ReadOnlyBooleanProperty disabledProperty() {...} 
     .... 
} 

public abstract class ViewPart extends Part { 
     public final StringProperty titleProperty() { ... } 
     public final ReadOnlyObjectProperty<Image> iconProperty() { ... } 
     .... 
} 

public abstract class Editor extends Part { 
     public final ObservableBooleanValue dirtyProperty() { .... } 
} 

をGUI要素を漏らすが、閉鎖可能であることについて、メインプログラムに伝え、

などを変更したしません。別のウィンドウに埋め込むことができます。このモデリングは、Eclipseの構造に基づいています。

関連する問題