2주동안 KDT 자바 프로젝트를 진행하면서 JavaFX를 이용하여 GUI를 구성하게 되었다. 은행, 병원, 기업. 3가지 중에서 한 가지 주제를 잡아서 해당 조직에서 사용하고 있거나, 사용할 수 있는 프로그램을 만드는 것이 목표였다.
우리 팀은 병원을 주제로 잡고, 병원에서 환자의 진료 접수를 받고, 의사가 환자에게 처방을 내리는 것을 주요기능으로 잡았다.
프로젝트의 자세한 회고록은 추후에 업로드할 예정이다.
JavaFX SDK 다운로드 (JDK 버전에 똑같이 맞춰서 다운로드 해줘야 한다. JDK 17 이라면, JavaFX 17을 설치.)
코드 편집기(IDE)에서 설정하기 (Eclipse 기준)
프로젝트 생성 -> Project Properties -> Java Build Path -> Libraries -> Add External JARs -> C:\javafx-sdk-17\lib 안에 있는 모든 .jar 파일 선택해서 추가.
Run Configurations -> Arguments -> VM arguments 에 다음 내용 추가
--module-path "C:\javafx-sdk-17\lib" --add-modules javafx.controls,javafx.fxml,javafx.graphics,javafx.web
public class MainApp extends Application {
@Override
public void start(Stage primaryStage) {
//루트 컨테이너 생성
VBox vbox = new VBox();
//Scene 생성 (가로 400, 세로 300(
Scene scene = new Scene(vbox, 400, 300);
//Stage primaryStage에 설정
primaryStage.setTitle("Stage"); //창 제목 설정
primaryStage.setScene(scene); //Scene 붙이기
primaryStage.show(); //창 띄우기
}
}
javaFX를 실행해주려면
public static void main(String[] args) {
launch(args);
}
다음과 같은 main 메소드가 꼭 필요하다.
실제 윈도우 창.
setTitle(String title) : 창 제목 설정
setScene(Scene scene) : 해당 Stage에 Scene 넣기
show() : 창 띄우기
close() : 창 닫기
setResizable(boolean) : 창 크기 조절 가능 여부
Stage 안에 표시되는 장면
배치에 가장 많이 사용한 두 가지 레이아웃이다.
VBox는 세로로 다른 아이템들을 배치한다.
HBox는 가로로 다른 아이템들을 배치한다.
Label label1 = new Label();
Button button1 = new Button();
VBox vbox1 = new VBox();
vbox1.getChildren().addAll(label1, button1);
다음과 같이 사용 가능하다.
VBox vbox변수이름 = new VBox();를 통해서 VBox 선언이 가능하고, .getChildren().add(하나) 또는 .getChildren().addAll(여러개) 명령어를 통해서 Box 내부에 아이템들을 추가할 수 있다.
문구다. 간단하게 단어나 문장을 표현할 수 있다.
Label titleLabel = new Label("제목");
이렇게 선언 가능하다.
버튼.
Button button1 = new Button();
과 같이 선언하여 사용 가능하다.
Button button1 = new Button("버튼1");
이런 식으로 선언하면 버튼 위에 "버튼1"이라는 문구가 있는 버튼이 생성된다.
버튼명.setOnAction (e -> {
//버튼 눌렀을 때의 동작 코드
});
버튼명.setOnMouseEntered ( e -> 버튼명.setStyle(
//마우스가 위로 올라갔을 때의 동작
));
버튼명.setOnMouseExited ( e -> 버튼명.setStyle(
//마우스가 벗어났을 때의 동작
));
JavaFX는 독특한 점이 GUI에 스타일을 입힐 때, css문법을 사용 가능하다는 것이다.
예를 들어 다음과 같이,
버튼명.setStyle (
"-fx-border-radius: 15;" + //모서리 둥글게
"-fx-background-radius: 15;" + //모서리 둥글게
"-fx-text-fill: white;" + //글씨색 하얗게
"-fx-font-size: 12px;" + //글씨크기
"-fx-font-weight: bold;" + //글씨체 두껍게
"-fx-font-family: '고딕';" + //글꼴을 '고딕'으로
"-fx-background-color: #faf3b3;" + //배경색 변경
"-fx-border-color: transparent;" + //테두리색 제거
"-fx-background-color : transparent;" //배경색 제거
)
버튼에 CSS 속성을 입힌다는 가정하에 다음과 같이 사용 가능하다.