ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • javaFX 라이프 사이클
    고급 JAVA 2020. 5. 22. 19:01

    javaFX 구조

     

    1. fx파일.fxml

     

    2. fx파일 컨트롤러.java

      

     - implement Initializable

     

       ->  initialize 메소드를 오버라이드 해야함

     

    3. fx파일 로더.java

     

     - extends Application

     

      -> start 메소드 오버라이드

     

     

    ==> Application.launch() -> 기본 생성자 -> init() -> start() -> 사용 -> platform.exit() -> stop()

     


    1. fx파일의 fx:id or 이벤트 핸들러로  fx파일 컨트롤러에서 제어

     

    2. 제어된 fx파일을 fx 파일 로더에서 실행

     


    launch()는 main 메서드의 매개값을 그대로 넘겨받음

     

    이 매개값을 init()에서 사용하고자 하는 경우 방법

     

     Stage와 Scene

     

     javaFX는 윈도우를 State로 표현, State는 한번에 하나의 장면을 가질 수 있는데,

     

     State를 java.scene.Scene으로 표현한다.

     

     메인 윈도우는 start() 메소드의 primaryState 매개값으로 전달되지만, Scene은 직접 생성해야 한다.

     

     Scene을 생성하려면 UI 루트 컨테이너인 javafx.scene.Parent가 필요한다.

     

     Parent는 추상 클래스이기 때문에 하위 클래스로 객체를 생성해서 제공해야 한다.

     

     주로 javafx.scene.layout 패키지의 컨테이너들이 사용도니다.

     

     실제로 UI컨트롤들이 추가되는 곳은 Parent가 되고 Parent의 폭과 높이가 Scene의 폭과 높이가 된다.

     

    public class T02_StageSceneTest extends Application {
    
    	@Override
    	public void start(Stage primaryStage) throws Exception {
        
    		VBox root = new VBox(); // 컨트롤들을 세로로 배치해 주는 컨테이너
            
    		root.setPrefWidth(650); // VBox의 너비
            
    		root.setPrefHeight(150); // VBox의 높이
            
    		root.setAlignment(Pos.CENTER);   // 컨트롤들을 가운데 정렬
            
    		root.setSpacing(20);	 // 컨트롤과 컨트롤 사이의 간격
    		
    		Label label = new Label(); // Label 객체 생성
            
    		label.setText("안녕하세요. JavaFX입니다.");
            
    		label.setFont(new Font(50));  // Font객체를 이용하여 글자크기 설정
    		
    		Button button = new Button();
            
    		button.setText("확 인");
    		
    		// 버튼에 대한 클릭 이벤트 처리
            
    		// 방법1 => 람다식을 사용하지 않은 경우
            
    		/*button.setOnAction(new EventHandler<ActionEvent>() {
    			
    			@Override
    			public void handle(ActionEvent event) {
    				// 처리할 내용을 기술하는 영역
    				Platform.exit(); // 프로그램 종료
    			}
    		});*/
    		// 방법2 => 람다식을 사용하는 경우...
    		button.setOnAction(e -> {
            
    			Platform.exit(); // 프로그램 종료
                
    		});
    		
    		// VBox에 컨트롤들 추가하기
            
    		//root.getChildren().add(label);
            
    		//root.getChildren().add(button);
            
    		root.getChildren().addAll(label, button);
    		
    		// VBox를 루트 컨테이너로 하는 Scene객체 생성
            
    		Scene scene = new Scene(root);
    		
    		primaryStage.setTitle("Stage와 Scene연습"); // 창제목
            
    		primaryStage.setScene(scene);  // Stage에 Scene 설정
            
    		primaryStage.show(); // 창(Stage) 보이기
    	}
    	
    	public static void main(String[] args) {
        
    		launch(args);
    	}
    
    }
    

    '고급 JAVA' 카테고리의 다른 글

    Non-terminating decimal expansion; no exact representable decimal result.  (0) 2021.05.11
    TCP / UDP  (0) 2020.05.22
    InetAddress 클래스  (0) 2020.05.22
    JavaFX 정리  (0) 2020.05.16
    API  (0) 2020.04.24

    댓글

Designed by Tistory.