JavaFX | 액션 이벤트 사용 | TextField와 Button


GUI의 기본이라고 하면, 역시 “사용자 입력"과 “명령 실행"일 것이다. 이것들에 대해 일반 응용 프로그램에서 가장 친숙한 것을 뽑는다면 “입력 필드"와 “푸시 버튼"이 있다. 이번에는 이것에 이용하여 보자.

TextField에 대해서

우선, 입력 필드이다. 가장 많이 사용되는 것은 텍스트 한 줄 입력을 위한 거시다. 이것은 javafx.scene.control 패키지 “TextField"라는 클래스로 되어 있다. 이 클래스는 다음과 같이 인스턴스를 생성한다.

new TextField()
new TextField(초기 값)

인수없이 new하는 것이 기본이다. String 인수를 지정하면, 해당 텍스트를 초기 값으로 필드에 설정 해준다. 입력된 텍스트는 다음과 같이 주고 받을 수 있다.

텍스트 얻기

String 변수 = textField.getText();

텍스트 변경

textField.setText(텍스트);

이 밖에 TextField에는 “프롬프트 텍스트(Prompt Text)“라는 것도 사용할 수 있다. 이 필드에 아무것도 쓰여지지 않고 선택도 되지 않을 때 회색으로 메시지를 표시하는 것이다. 흔하게 입력 필드 등에서 “이름 입력”, “주소 입력” 등과 같이 가이드가 되는 텍스트가 흐리게 표시되어 있는 것을 본적이 있을 것이다. 그와 같다.

프롬프트 텍스트 설정

textField.setPromptText(텍스트);

Button에 대해서

푸시 버튼은 javafx.scene.control 패키지 “Button"이라는 클래스로 되어 있다. 이것도 다음과 같이 인스턴스를 생성할 수 있다.

new Button()
new Button(표시 텍스트)

인수에 텍스트로 String를 지정하고 new로 생성을 하면, 그 텍스트를 버튼에 표시한다. 푸시 버튼을 사용하는 경우에는 “전송” 또는 “클릭"과 같이 버튼에 텍스트를 일반적으로 표시하기 때문에, 이 텍스트를 입력하는 것이 기본이라고 생각해도 좋을 것이다. 또한 TextField와 마찬가지로 getText/setText 표시 텍스트를 조작하는 것도 가능하므로 new Button()으로 버튼을 생성하고, 이후에 표시 텍스트를 설정할 수도 있다.

아래 소스 코드 예제는 Label, TextField 및 Button 같은 GUI를 사용하는 응용 프로그램이다. 각각 인스턴스 생성 후에 BorderPane에 넣어서 표시하고 있다.

package com.devkuma.javafx;
 
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
 
public class App extends Application {
    Label label;
    TextField field;
    Button button;
 
    public static void main(String[] args) {
        launch(args);
    }
 
    @Override
    public void start(Stage stage) throws Exception {
        label = new Label("This is JavaFX!");
        field = new TextField();
        button = new Button("Click");
        BorderPane pane = new BorderPane();
        pane.setTop(label);
        pane.setCenter(field);
        pane.setBottom(button);
        Scene scene = new Scene(pane, 320, 120);
        stage.setScene(scene);
        stage.show();
    }
 
}