哪种是在JavaFX中在窗口之间传递信息的最佳方法?

时间:2017-10-14 23:38:32

标签: java javafx java-8 javafx-8 fxml

我使用下面的代码传递信息,但我想知道其他方法。在FXMLDocumentController的事件处理程序方法handleSubmitButtonAction中,我创建另一个窗口加载MainFXML文件。之后,我抓住它的控制器并将我的信息发送到主窗口。有没有更好的方法呢?

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());        
    }

1 个答案:

答案 0 :(得分:1)

尝试简短回答。

我所做的是创建控制器类的“应用程序模型”。应用程序模型的根当然是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的结构。