///SceneChanger Class 부분
package com.example.fxtest;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import java.io.IOException;
public class SceneChanger {
public static Stage changeModal(Button buttonScene, String view, double width, double height) throws IOException {
// 현재 스테이지 창을 가져옵니다.
Stage currentStage = (Stage) buttonScene.getScene().getWindow();
// FXML 로더를 사용하여 새로운 Scene을 로드합니다.
FXMLLoader loader = new FXMLLoader(buttonScene.getClass().getResource(view));
Parent root = loader.load();
root.getProperties().put(loader, "loader");
// 새 Scene을 설정하고 새로운 Stage를 생성합니다.
Scene newScene = new Scene(root);
Stage newStage = new Stage();
newStage.setScene(newScene);
// 모달 창 설정: 다른 창을 사용할 수 없도록 설정
newStage.initModality(Modality.APPLICATION_MODAL);
newStage.initOwner(currentStage);
// 창의 타이틀 바 제거
newStage.initStyle(StageStyle.UNDECORATED);
double centerX = currentStage.getX() + currentStage.getWidth() / 2;
double centerY = currentStage.getY() + currentStage.getHeight() / 2;
//double width = 400; // 임시 값, 필요에 따라 조정 가능
//double height = 550; // 임시 값, 필요에 따라 조정 가능
newStage.setWidth(width);
newStage.setHeight(height);
newStage.setX(centerX - width / 2); // 새 스테이지를 현재 스테이지의 중앙에 위치시키기
newStage.setY(centerY - height / 2);
return newStage;
}
public static void changeScene(Button buttonScene, String view, double width, double height){
}
}
위 코드를 클래스로 따로 파서 SettingController 클래스의 OnSetKeyButtonClick() 메서드부분에
@FXML
private void onSetKeyButtonClick() throws IOException {
Stage newStage = SceneChanger.changeModal(setKeyButton, "keysetting-view.fxml", 400, 550);
// 현재 스테이지 창을 가져옵니다.
/* Stage currentStage = (Stage) setKeyButton.getScene().getWindow();
// FXML 로더를 사용하여 새로운 Scene을 로드합니다.
FXMLLoader loader = new FXMLLoader(getClass().getResource("keysetting-view.fxml"));
URL fxmlUrl = setKeyButton.getClass().getResource("keysetting-view.fxml");
System.out.println("loader = " + loader);
System.out.println("fxmlUrl = " + fxmlUrl);
Parent root = loader.load();
// 새 Scene을 설정하고 새로운 Stage를 생성합니다.
Scene newScene = new Scene(root);
Stage newStage = new Stage();
newStage.setScene(newScene);
// 모달 창 설정: 다른 창을 사용할 수 없도록 설정
newStage.initModality(Modality.APPLICATION_MODAL);
newStage.initOwner(currentStage);
// 창의 타이틀 바 제거
newStage.initStyle(StageStyle.UNDECORATED);
double centerX = currentStage.getX() + currentStage.getWidth() / 2;
double centerY = currentStage.getY() + currentStage.getHeight() / 2;
double width = 400; // 임시 값, 필요에 따라 조정 가능
double height = 550; // 임시 값, 필요에 따라 조정 가능
newStage.setWidth(width);
newStage.setHeight(height);
newStage.setX(centerX - width / 2); // 새 스테이지를 현재 스테이지의 중앙에 위치시키기
newStage.setY(centerY - height / 2);
*/
KeySettingController keyController = (KeySettingController) newStage.getScene().getProperties().get("loader");
// 키 설정 컨트롤러 가져오기 및 핸들러 초기화
//KeySettingController keyController = loader.getController();
keyController.initPageHandler(newStage.getScene(), newStage.getScene().getRoot());
// 새로운 스테이지를 표시합니다.
newStage.show();
}
위 코드를 클래스로 따로 파서 SettingController 클래스의 OnSetKeyButtonClick() 메서드부분에