2017-10-14 67 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

我想知道哪個是最好的方法。由於fxml文件,每個javafx應用程序都是MVC的本質,對吧? –

+0

最好的方法只是一個意見。每個人都可以有不同的意見。所以你可以根據不同的意見得到許多不同的答案,你不會接近確定最好的方式。無論如何,國際海事組織,如果它是大型應用程序,使用依賴注入機制,如[Gluon Ignite](http://gluonhq.com/labs/ignite/),使注入的對象JavaFX豆具有可觀察的屬性,並有你的UI項目綁定或監聽屬性的更改。但另一方面,您的問題所提供的解決方案對您而言可能最適合您,您決定。 – jewelsea

回答

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的結構。

相關問題