본문 바로가기

JavaFX

[JavaFX] 윈도우 로그인 화면 제목 타이틀바 없애고 화면 이동 드래그 하기

JavaFX 로그인 화면

  • 윈도우 타이틀바를 없애고 로그인 화면만 보여준다.
  • 로그인 화면 창을 드래그로 화면이동 한다.

 

메인 화면에서 login.fxml 화면을 호출한다.

이 때 StageStyle을 UNDECORATED 로 스테이지의 타이틀바, 확대, 축소, 닫기 버튼이 없는 화면으로 띄운다.

 

public class Main extends Application {
  @Override
  public void start(Stage primaryStage) {
    try{
      Parent root = FXMLLoader.load(getClass().getResource("login.fxml"));
      
      primaryStage.initStyle(StageStyle.UNDECORATED);
      
      Scene scene = new Scene(root);
      
      primaryStage.setScene(scene);
      primaryStage.show();
    } catch(Exception e){
    
    }
  }
  
  public static void main(String[] args) {
    lunch(args);
  }
}

 

 

 

login.fxml 파일의 최상단 AnchorPane 의 fx:id 를 wrap로 변수명을 지정한다.

<AnchorPane fx:id = "wrap" fx:controller="LoginController>

</AnchorPane>

 

 

 

 

LoginController 에서 stageMove 함수로 화면이동을 설정한다.

public class LoginController implements Initializable{
  @FXML private AnchorPane wrap;
  
  private double x = 0;
  private double y = 0;
  
  @Override
  public void initialize(URL location, ResourceBundle resources) {
    stageMove();
  }
  
  /* 로그인 화면 이동 */
  private void stageMove(){
    wrap.setOnMousePressed((event) -> {
      x = event.getSceneX();
      y = event.getSceneY();
    });
    
    wrap.setOnMouseDragged((event) -> {
      stage = (Stage) wrap.getScene().getWindow();
      stage.setX(event.getScreenx() - x);
      stage.setY(event.getScreenY() - y);
    });
    
    wrap.setOnMouseReleased((event) -> {
      stage = (Stage) wrap.getScene().getWindow();
    });
  }
}