JAVA chapter17. JavaFX. 17.1 JavaFX 개요. 17.2 JavaFX 애플리케이션 개발 시작
JAVA/CONCEPT 2017. 12. 3. 08:58 |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.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 |
'JAVA > CONCEPT' 카테고리의 다른 글
JAVA chapter17. javaFX. 17.4 JavaFX 컨테이너 (0) | 2017.12.03 |
---|---|
JAVA chapter17. javaFX. 17.3 Java FX 레이아웃 (0) | 2017.12.03 |
JAVA chapter14. 람다식. 14.6 메소드 참조 // 추가하기 (0) | 2017.12.02 |
JAVA chapter14. 람다식. 14.5 표준 API의 함수적 인터페이스 (2) (0) | 2017.12.01 |
JAVA chapter14. 람다식. 14.5 표준 API의 함수적 인터페이스 (1) (0) | 2017.12.01 |