2013-07-16 2 views
0

저는 javafx를 처음 접했습니다. 나는 화면을 전환하는 많은 방법을 보았다. 그러나 그들은 어떻게 든 생각을 해본 후에 어떻게 든 작동하지 않았다. 나는이 논리를 사용하는 것을 생각했다. 제가 프로젝트에서 너무 멀리 가기 전에 제가 계속해서 조언을 해줄 수 있는지 알아야합니다.Javafx fxml 화면 전환하기

@FXML 
public void nextAfterPassangerButtonClicked() throws Exception { 

    MainScreenDatabaseHandler a = new MainScreenDatabaseHandler(getId(), getFirstName(), getLastName(), getOtherName(), getSexSelection(), getMobileNumber(), getEmergencyContact(), getHomeAdress()); 
    //send collected data to database 
    passangerPaymentAnchorPane.getChildren().remove(0); 
    Node node = FXMLLoader.load(getClass().getResource("CargoPayment.fxml")); 
    passangerPaymentAnchorPane.getChildren().add(node); 
} 

//Handle All Menu Bar Buttons 
@FXML 
public void startPageBarButtonClicked() throws Exception { 
    passangerPaymentAnchorPane.getChildren().remove(0); 
    mainAnchor.getChildren().remove(0); 
    Node node = FXMLLoader.load(getClass().getResource("MainScreen.fxml")); 
    mainAnchor.getChildren().add(node); 
} 

public void allPassangersMenuBarButtonClicked() throws Exception { 

    passangerPaymentAnchorPane.getChildren().remove(0); 
    Node node = FXMLLoader.load(getClass().getResource("AllPassangersView.fxml")); 
    passangerPaymentAnchorPane.getChildren().add(node); 
} 

버튼 중 하나를 클릭하면 현재 장면이 제거되고 관련 fxml이로드됩니다. 감사합니다. passangerPaymentAnchorPane은 다른 fxml이로드 및 언로드되는 마더 패널과 같은 역할을합니다.

답변

1

fxml 파일을로드하는 컨테이너 역할을하는 레이아웃이 있습니다. 그 아이들은 어떤 사건 행동으로 대체 될 것입니다. 반복적 인 "layout.remove - fxmlloader.load() - layout.add()"쌍을 리팩터링하는 loadView(String fxmlFile) 메소드와 같이 프로젝트가 커지기 전에 코드를 리팩터링하는 것이 좋습니다. fxml 파일의 구문 분석 및 로딩이 비싼 작업이기 때문에 또한, 느리게 그것을과 같이보기 만 업데이트 : 나는 또한 자바 FX 멀티 스크린 문제로 분투

Pane cargoPaymentPane; 
CargoPaymentController cargoPaymentController; 
FXMLLoader fxmlLoader = new FXMLLoader(); 

public void loadCargoPaymentView(String newCargoData) { 
    if(cargoPaymentPane == null) { 
     cargoPaymentPane = fxmlLoader.load(getClass().getResource("CargoPayment.fxml").openStream()); 
     cargoPaymentController = (CargoPaymentController) fxmlLoader.getController(); 
    } 
    cargoPaymentController.updateView(newCargoData); 
} 
+0

고맙습니다. –

1

. 마지막으로 다음과 같이 해결했습니다. 나는

https://github.com/nrkkalyan/javafx

가 댓글을 제안 자유롭게 GitHub의에 코드를 추가하고있다.

+1

여기에 관련 코드를 게시하는 것이 좋습니다. [대답] 참조. – brasofilo