Rucrazia's Blog

JAVAFX 1. 화면 전환 본문

기술 - Coding/Java

JAVAFX 1. 화면 전환

DoyoungJ 2017. 6. 7. 14:26
javafx에서 화면을 전환하기 위해서는 몇 가지 방법이 있다.

제가 사용한 방법으로는 FXMLLoader를 이용하여 FXML을 불러오는 방식을 사용했습니다.
FXMLLoader 안에 있는 setLocation 함수를 이용하여 원하는 fxml 파일을 불러옵니다.

제가 만든 것의 경우는 RootLayout이라고 해서 위의 메뉴바를 fxml로 구현해놓은 것과
그 밑에 동적으로 화면이 바뀌게 하는 부분이 있습니다.

그래서, 초록색의 경우 메뉴바에 대한 fxml을 불러오는 것이고,
파란색의 경우 메뉴바 밑의 동적으로 바뀌는 화면을 불러오는 것입니다.
이렇게 하게 되면 두 개 이상의 fxml을 불러올 수 있습니다.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(LoginMain.class.getResource("/MainPage/view/RootLayout.fxml"));
rootLayout = (BorderPane) loader.load();

Scene home_page_scene = new Scene(rootLayout);
Stage app_stage = (Stage) ((Node) event.getSource()).getScene().getWindow();

app_stage.hide(); //optional
app_stage.setScene(home_page_scene);
app_stage.show();

FXMLLoader loader2 = new FXMLLoader();
loader2.setLocation(LoginMain.class.getResource("/MainPage/view/Main.fxml"));
BorderPane personOverview = (BorderPane) loader2.load();

// 연락처 요약을 상위 레이아웃 가운데로 설정한다.
rootLayout.setCenter(personOverview);



내부 Pane에 fxml을 넣는 방법에 대해서 알려드리겠습니다.
initiialize()에서 FXMLLoader로 Pane에 넣고 싶은 fxml 파일들을 로드합니다.
저 같은 경우는 mainOverview라는 AnchorPane에 넣으려고 합니다.

mainOverview Pane -> getChildren() -> add("fxml 파일명")  : Pane에 fxml 넣기.

mainOverview Pane -> getChildren() -> remove("fxml 파일명") : Pane에 넣은 fxml 삭제

remove를 해주는 이유는, add를 해주게 되면 계속 중첩이 되어 화면에 나오기 때문에 안 쓰는 fxml은 삭제 해줘야 합니다.


@FXML private AnchorPane mainOverview;
private AnchorPane newLoadedPane;
private AnchorPane newLoadedPane2;
@FXML
private void initialize() throws IOException {

newLoadedPane = FXMLLoader.load(getClass().getResource("view/FormPage.fxml"));
newLoadedPane2 = FXMLLoader.load(getClass().getResource("view/TestPage.fxml"));
}

@FXML
protected void handleFirstButtonAction(ActionEvent event) throws IOException {


if(firstButtonFlag == false) {
mainOverview.getChildren().remove(newLoadedPane2);
mainOverview.getChildren().add(newLoadedPane);
firstButtonFlag = true;
secondButtonFlag = false;
}else{

}
}


@FXML
protected void handleFirstButtonAction2(ActionEvent event) throws IOException {
if(secondButtonFlag == false) {
mainOverview.getChildren().remove(newLoadedPane);
mainOverview.getChildren().add(newLoadedPane2);
secondButtonFlag = true;
firstButtonFlag = false;
}else{

}
}