Main은 size만 조정하겠습니다.


Scene scene = new Scene(root,200,200);





fxml을 열어 캡처와 같이 수정


BorderPane Center 위에 AnchorPane


그 위에 Button, Code 부분은 캡쳐와 같이 설정


그리고 나서 fxml을 이름만 custom으로 설정해 새로 만들어서




AnchorPane 위에


Button - Code : fx:id - closebtn


    On Action - close


Label - Code : fx:id - label


위와 같이 추가하고 저장, 닫기 기능을 구현하기 때문에 Controller class 등록을 해준다.


이번에는 컨트롤러 클래스에서 방법 2를 이용해 스테이지를 불러오고


새로운 스테이지를 생성해서 그 위에 팝업을 띄우는 작업을 한다.



package app;

import java.io.IOException;

import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class MainController {
	@FXML private Button btn;
	@FXML private Button closebtn;
	@FXML private Label label;

	private Stage pop; // 스테이지가 들어갈 변수
	
	public void popup() {
		// 메인 스테이지 취득, 전의 두가지 방법 중 두번째 방법
		Stage mainStage = (Stage)btn.getScene().getWindow(); 
		
		// 새로운 스테이지 생성 (옵션 추가, 스타일)
		Stage pop = new Stage(StageStyle.DECORATED); // 스테이지 옵션
		pop.initModality(Modality.WINDOW_MODAL); // 그 위에 뜨는 모달의 옵션
		pop.initOwner(mainStage); // 메인 스테이지 부여
		
		try {
			// 새로운 스테이지에 custom 레이아웃 불러오기
			Parent root = FXMLLoader.load(getClass().getResource("custom.fxml"));
			
			// 씬에 추가
			Scene sc = new Scene(root);
			pop.setScene(sc);
			pop.setTitle("팝업 띄우기");
			pop.setResizable(false); // 창 사이즈 조절 차단
			
			// 보여주기
			pop.show();
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void close() { // 현재의 스테이지를 받아서 close를 해주어야 함
		pop = (Stage)closebtn.getScene().getWindow(); // 버튼을 통해서 현재 스테이지를 알아냄
		pop.close();
	}
}




+ Recent posts