이번 포스팅은 JavaFx 를 사용해서 두 씬 사이를 이동해본다.

 

JavaFX 에서 윈도우를 Stage 라고 한 것을 기억한다면 외 Scene 장면 인지 알 수 있을 것이다.

 

영화나 연극의 무대가 스테이지라면 씬은 장면을 말한다. 장면이 바뀌면서 스토리가 진행되는 것 처럼 프로그램을 사용할 때 장면을 전환하듯이 사용하는 것이다.

 

간단한 버튼을 붙여서 창을 이동하게 만든다.

 

객체지향 프로그래밍의 장점이란게 이런 것이다.

 

 

 

예제 코드를 보면서 확인해본다.

 

GUI 프로그래밍에서 가장 시간이 들어가는 것은 가끔 디자인이 되기도 한다. GUI가 가진 컨포넌트 들이 다 성질도 제각각이고 사이즈도 다르다. 디자인에 대해 배우려고 컴퓨터 소프트웨어를 하는것은 아니겠지만 그렇다 하더라도 어느정도 배치하고 사용할 수 있어야 한다. GUI도 결국 알고리즘의 하나로 바라볼 필요가 있다.

 

package com;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application  {

    Stage window;
    Scene scene1, scene2;

    @Override
    public void start(Stage primaryStage) throws Exception{
        window = primaryStage;

        // label1, button1

        Label label1 = new Label("JAVA FX Label");
        Button button1 = new Button("Go to Scene 2");
        button1.setOnAction(e->window.setScene(scene2));

        // layout1

        VBox layout1 = new VBox(20);
        layout1.getChildren().addAll(label1, button1);
        scene1 = new Scene(layout1, 300, 300);

        // button 2

        Button button2 = new Button("Go back to Scene 1");
        button2.setOnAction(e->window.setScene(scene1));

        // layout 2

        StackPane layout2 = new StackPane();
        layout2.getChildren().add(button2);
        scene2 = new Scene(layout2, 500,300);

        window.setScene(scene1);
        window.setTitle("Title Here");
        window.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

 

* 우선 import 문이다. import 문을 보면 무엇을 사용 하는지 알 수 있다. 어떤 클래스를 사용하느냐는 결국 결과물에 직접적인 연관성이 있다.

 

 

* 씬을 두개 만든다는 것은 레이아웃을 2개 만든다는 말과도 같다.

 

코드를 보면 window 는 Stage 클래스이다. 이것은 보통 root라고 부르기도 한다. 가장 기본이 되는 윈도우다.

 

윈도우 1개에 씬을 2개 넣는다. 그 안에는 레이블이나 버튼 등 컴포넌트가 들어갈 수 있다.

 

버튼의 클릭시에는 window. setScence 으로 장면을 전환한다.

 

장면을 전환하는 메서드는 window 에 있다. 그러면 각각의 Scene 두개를 만들면 언제라도 전환이 가능하다.

 

위에서는 VBox 레이아웃을 사용했다. addAll  메서드로 컴포넌트를 넣고, 기 레이아웃 객체를 Scene 에 넣는다. Scene에는 레이아웃 참조와 창의 크기를 넣는다.

 

* 두번째 씬을 만든다.

 

setOnAction 메서드에 람다식으로 setScene 메서드를 넣는다.

 

씬 1처럼 비슷하게 레이아웃을 생성한다. StackPane 은 간단히 위에 쌓는 레이아웃이다.

 

마지막 부분에 setScenec 은 초기화한 씬이다.

 

버튼을 클릭할 때마다 scene1과 scene2를 이동할 수 있다. 윈도우창의 크기는 두 씬이 다르게 설정할 수 있다.

 

이제 Scene 클래스를 사용해서 하나의 윈도우를 두개의 장면으로 나눠서 사용할 수 있다.

공유하기

facebook twitter kakaoTalk kakaostory naver band