본문 바로가기

JavaFX

[JavaFX] 자바fx 팝업창 모달로 부모창 선택 못하게 initOwner, initModality, Modality

팝업화면을 띄울 때 부모창이 선택 안되게 하기

 

javafx 에서 initOwner 메소드를 사용해서 부모창에서 모달을 띄울 때 부모창이 선택 안되게 할 수 있다.

  • initOwner 메소드를 사용하는 방법
  • initModality 메소드를 사용하는 방법

 

 

fxml에서 fx:id 로 anchorpane을 만든다.

 

<AnchorPane fx:id="anchorPane">
  ...
</AnchorPane>

 

 

 

fxml에서 fx:id의 값을 선언한다.

@FXML private AnchorPane anchorPane;

popupOpen 메소드에서 팝업을 호출한다.

initOwner 메소드로 부모창의 window를 입력한다.

initModality 메소드의 Modality.WINDOW_MODAL 로 모달창이 부모창을 선택할 수 없도록 한다.

Modality 는 enum 으로

NONE, WINDOW_MODAL, APPLICATION_MODAL 값을 사용한다.

@FXML private AnchorPane anchorPane;

@FXML
private void popupOpen(){
  try{
    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getClassLoader().getResource("path");
    Parent root = (Parent) loader.load();
    Scene scene = new Scene(root);
    Stage stage = new Stage();
    
    stage.initOwner(anchorPane.getScene().getWindow());
    stage.initModality(Modality.WINDOW_MODAL);
    stage.setScene(scene);
    stage.show();
  }catch(Exception e) {
  
  }
}

 

 

[JavaFX] 자바fx 화면 생성과 동시에 팝업(모달) 띄우기 Platform.runLater

자바fx로 개발하면서 화면이 생성됨과 동시에 팝업을 띄워야 할때가 있다. 그냥 팝업만 띄우면 상관 없지만 팝업을 띄운 후 부모창을 선택할 수 없게 하려고 한다면 initOwer을 사용하면 될것이다.

ohtanja.tistory.com

 

 

 

APPLICATION_MODAL을 사용하면 부모창이 아닌 다른 응용프로그램으로의 이벤트를 차단한다.

그럼 stage.initOwner 이벤트를 사용하지 않고 initModality만 사용해서 모달을 띄우고 다른 애플리케이션을 선택할 수 없게 할 수 있다.

stage.initModality(Modality.WINDOW_MODAL)