HYH0804 / Tetris

4 stars 1 forks source link

SceneChanger #12

Open HYH0804 opened 1 month ago

HYH0804 commented 1 month ago
///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();
    }