- 어제와 오늘은 기본적으로 푹 쉬었다.
- 다만 JavaFX에서 다중 뷰를 사용하는 방법에 대해 고민하면서 간단한 테스트를 진행해보았다.
- 다음 주 화요일 교육부터는 JavaFX를 이용해 비교적 복잡한 도서대여 어플리케이션을 구현하는 프로젝트에 들어가게 된다.
- 도서 검색용 메인 뷰에 필요할 때 다이얼로그 객체를 생성하여 띄우는 식으로 할 수도 있지만, MVC 패턴을 지키려면 별도의 뷰로 독립시켜 구조화하는 것이 유리할 같아보인다.
- 원래는 JavaFX로 MDI(Multiple Document Interface) 프로그램을 짤 방법이 없을지 고민했다.
- 대안으로 생각해본 것은 여러 개의 씬을 만들고 메인의 Stage 객체에 요청되었을 때마다 넣어주는 방식이다.
- 실제로 시도해보았을 때 무리 없이 작동했으나, 메뉴 바와 같이 공통적인 컨트롤에 대한 코드가 중복된다는 문제가 있다.
- 그래서 메인의 씬 객체에 Pane 레이아웃을 필요할 때 교체하여 부착해주는 방식도 고안해보았으나, 씬에 레이아웃을 넣을 때 거듭 오류(root.getChildren().set(1, n))에서 root에 대한 NullPointerException이 발생했다.
// 전략
private VBox root;
private AnchorPane subLayoutOne;
private AnchorPane subLayoutTwo;
private AnchorPane subLayoutThree;
@FXML // 메뉴 아이템의 핸들러
private void handleMenuitemLayoutTwo() {
System.out.println("change to 2");
changeSubLayout((Node)subLayoutTwo);
}
@FXML
private void handleMenuitemLayoutThree() {
System.out.println("change to 3");
changeSubLayout((Node)subLayoutThree);
}
private void changeSubLayout(Node n) {
root.getChildren().set(1, n);
}
// 후략
- 결과적으로 아직 테스트 중에 있으며 의미있는 결과물도 만들어내지 못한 상태이다.
- 그렇지만 이 과정에서 View를 XML 기반 언어로 정의하여 구성하는 FXML에 대해 접하고 적용해보았는데 이 점은 큰 도움이 되었다.