这是在JavaFX的窗口之间传递信息的最佳方式?

问题描述:

我使用下面的代码来传递信息,但我想知道其他方式。在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

我想知道哪个是最好的方法。由于fxml文件,每个javafx应用程序都是MVC的本质,对吧? –

+0

最好的方法只是一个意见。每个人都可以有不同的意见。所以你可以根据不同的意见得到许多不同的答案,你不会接近确定最好的方式。无论如何,国际海事组织,如果它是大型应用程序,使用依赖注入机制,如[Gluon Ignite](http://gluonhq.com/labs/ignite/),使注入的对象JavaFX豆具有可观察的属性,并有你的UI项目绑定或监听属性的更改。但另一方面,您的问题所提供的解决方案对您而言可能最适合您,您决定。 – jewelsea

试图给出一个简短的答案。

我所做的是我创建了控制器类的“应用程序模型”。应用程序模型的根本当然是Application类的控制器。应用模型不漏的GUI元素,而是讲述了被关闭的主程序,已经改变等

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() { .... } 
} 

就像在Eclipse这些部分可以有自己的窗口,但他们不一定有,他们还可以被嵌入到另一个窗口中。这种建模基于Eclipse的结构。