chapter17. javaFX.


17.1 java FX 개요

* 자바 UI 변천사



17.2 JavaFX 애플리케이션 개발 시작

// JavaFX 애플리케이션을 개발하려면 제일 먼저 메인 클래스를 작성해야 한다.

// 메인 클래스는 JavaFX 애플리케이션을 시작하는 관문이다


17.2.1 메인 클래스

// JavaFX 애플리케이션을 시작시키는 메인 클래스는 추상 클래스인 Application을 상속받고

// Application에 있는 start() 메소드를 재정의를 해야한다

// start() 메소드는 UI(User Interface : 사람과 사물간의 상호작용)를 생성하고 윈도우를 생성하는 메소드이다


// start() 메소드는 코드에서 직접 호출할 수는 없고, 메인클래스에서 Application이 가지고 있는 메소드인 launch를 호출함으로써, 내부적으로 start() 메소드를 호출하게 해야한다


// JavaFX는 window를 Stage라는 용어로 사용한다 

// 매개변수 값으로 제공되는 primaryStage를 show함으로써 윈도우를 보여준다



 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package sec02.exam01_application_start;
 
import javafx.application.Application;
import javafx.stage.Stage;
 
public class AppMain extends Application { // Application 클래스는 추상 클래스이므로
    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.show();  //윈도우 보여주기
    }
    
    public static void main(String[] args) {
        launch(args); //AppMain 객체 생성 및 메인 윈도우 생성
    }
}
cs


17.2.2 JavaFX 라이프사이클
// launch() 메소드가 호출이되면 내부적으로 두 개의 쓰레드가 호출이되는데
// JavaFX Application Thread와 JavaFX Launcher이다
// JavaFX Application Thread는 UI를 생성하고 변경을 하는 쓰레드고, 
// JavaFX Launcher는 init()만 실행해 주는 쓰레드이다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package sec02.exam02_application_lifecycle;
 
import javafx.application.Application;
import javafx.stage.Stage;
 
public class AppMain extends Application {
    public AppMain() { // 기본 생성자를 이용해서 객체 생성함
        System.out.println(Thread.currentThread().getName()+": AppMain() 호출");
    }
    
    @Override
    public void init() throws Exception {
        System.out.println(Thread.currentThread().getName()+": init() 호출");
    } // init()(JavaFX Launcher)안에는 UI생성 코드를 넣으면 안된다,
     // JavaFX Application Thread에만 넣는다
    @Override
    public void start(Stage primaryStage) throws Exception {
        System.out.println(Thread.currentThread().getName()+": start() 호출");
        primaryStage.show();   
    }
    
    @Override
    public void stop() throws Exception {
        System.out.println(Thread.currentThread().getName()+": stop() 호출");
    }
    
    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName()+": main() 호출");
        launch(args);
    }
}
cs


17.2.3 메인 클래스 실행 매개값 얻기



17.2.4 무대(Stage)와 장면(Scene)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package sec02.exam03_stage_scene;
 
import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.stage.Stage;
 
public class AppMain extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        VBox root = new VBox();                            //Parent 하위 객체인 VBox 생성
        root.setPrefWidth(350);                            //VBox의 폭 설정
        root.setPrefHeight(150);                            //VBox의 높이 설정
        root.setAlignment(Pos.CENTER);                    //컨트롤을 중앙으로 정렬
        root.setSpacing(20);                                //컨트롤의 수직 간격
 
        Label label = new Label();                        //Label 컨트롤 생성
        label.setText("Hello, JavaFX");                        //text 속성 설정
        label.setFont(new Font(50));                        //font 속성 설정
        
        Button button = new Button();                    //Button 컨트롤 생성
        button.setText("확인");                                //text 속성 설정
        button.setOnAction(event->Platform.exit());    //클릭 이벤트 처리
        
        root.getChildren().add(label);                        //VBox에 Label 컨트롤 추가
        root.getChildren().add(button);                    //VBox에 Button 컨트롤 추가
        
        Scene scene = new Scene(root);                //VBox를 루트 컨테이너로 해서 Scene 생성
        
        primaryStage.setTitle("AppMain");                //윈도우의 제목 설정
        primaryStage.setScene(scene);                    //윈도우에 장면 설정
        primaryStage.show();                                //윈도우 보여주기    
    }
 
    public static void main(String[] args) {
        launch(args);
    }
}
cs





Posted by 너래쟁이
: