2017-10-14 10 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을 관찰 가능한 속성으로 만들고 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 구조에 기반합니다.