티스토리 뷰
JavaFX를 시작하며
- 이번 시간에는 JavaFX를 이용해서 정말 간단한 UI를 만드는 작업을 해보겠습니다.
- 정말 생판 모르던 JavaFX를 가지고 이렇게 저렇게 막 만든지라 볼품(?) 없어도 이해 바랍니다.
- 아래와 같은 UI 를 만들어 볼 예정입니다. 텍스트를 입력하고 버튼을 누르면 하단에 텍스트가 뜨는 형식입니다.
프로젝트 구조
프로젝트 구조는 이러합니다.
1. Main.java
2. Controller.java
3. sample.fxml
위 처럼 3개의 파일이 만들어져 있습니다. UI를 만드는 방법은 Java 코드에서 만드는 방법과 fxml에서 만드는 방법이 있는데 저는 fxml 을 사용해 만들겠습니다.
* fxml이란?
- XML 을 base로 한 유저 인터페이스 마크업 언어로 JavaFX application 의 유저 인터페이스를 작성하는 목적으로 오라클 사에서 만들어졌다.
구현test.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToolBar?>
<?import javafx.scene.image.Image?>
<?import javafx.scene.image.ImageView?>
<?import javafx.scene.layout.BorderPane?>
<BorderPane prefHeight="200" prefWidth="300" xmlns="http://javafx.com/javafx/8.0.101" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<top>
<ToolBar>
<items>
<TextField fx:id="txtField" prefWidth="240" style="-fx-cursor: red;" styleClass="clickable" stylesheets="@style.css" />
<Button fx:id="btn" onAction="#handleButtonActoin" prefWidth="40" />
</items>
</ToolBar>
</top>
<center>
<ImageView fx:id="imageView">
<image>
<Image url="@imgres.png" />
</image>
</ImageView>
</center>
<bottom>
<Label fx:id="resultLabel" alignment="CENTER" prefWidth="300" />
</bottom>
</BorderPane>
- 이렇게 작성을 했고 상단에 툴바에 텍스트 필드와 버튼이 들어가고 가운데 center에는 이미지뷰가 들어갑니다. 그리고 bottom 에는 텍스트를 출력할 label이 들어갑니다.
- 이제 UI 작성이 완료가 되었습니다. 아 그전에 이미지를 넣어야 겠죠? image 같은 경우에는 아무 이미지나 다운을 받아 소스 파일 위치에 넣어주시면 됩니다. 그리고 이미지의 이름을 <Image> 태그 안에 url에 명시를 해줍니다.
- 이제 해야 할 일은 Button 을 제어하고 입력된 Text를 출력해주는 일 입니다. 순서를 생각해 보죠.
1. 버튼 클릭을 감지한다.
2. TextField에 입력된 값을 가져와 저장한다.
3. 저장된 입력 값을 Label에 출력 해준다.
- 이 절차를 진행 하면 됩니다. 소스코드를 보죠. 일단 그 전에 위 소스코드에서 Button 태그를 한 번 볼까요?
- 위에서 onAction="#handleButtonAction" 이라는 내용이 보이시나요? 이 문법이 Button이 클릭 됬을 때 즉 액션이 일어났을 때
- 감지를 할수 있는 리스너를 달아주는 과정이라고 보시면 될 것 같습니다. 그래서 이제 아래의 Controller.java 코드를 보시면
- handleButtonActoin 이라는 메소드에서 getText로 텍스트 필드의 입력값을 저장하고 바로 Label에 출력을 해주는 모습을 볼 수 있습니다.
Controller.java
package sample;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.*;
import javafx.scene.image.ImageView;
import java.net.URL;
import java.util.ResourceBundle;
public class Controller implements Initializable{
@FXML
private TextField txtField;
@FXML
private Label resultLabel;
private String inputValue;
@FXML
private void handleButtonActoin(ActionEvent event){
inputValue = txtField.getText();
txtField.setText("");
resultLabel.setText(inputValue);
}
@Override
public void initialize(URL location, ResourceBundle resources) {
}
}
Main.java
- 어플리케이션을 실행시킬 Main 클래스를 작성해보겠습니다.
- 이때 test.fxml 파일의 위치가 Main 패키지 경로와 동일한 위치에 있어야 합니다.
- 아래 코드에서는 java/sample 패키지 밑에 있으므로 test.fxml 은 resources/sample 밑에 있어야 함
package sample;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("test.fxml"));
primaryStage.setTitle("Application");
primaryStage.setScene(new Scene(root, 400, 400));
primaryStage.show();
}
}
반응형
'프로그래밍 > JavaFX' 카테고리의 다른 글
[JavaFX] Container 내의 요소에 Margin 속성 주는 방법 (0) | 2016.12.27 |
---|---|
[JavaFX] ComboBox 값 초기화 방법 및 사용법 (1) | 2016.12.26 |
[JavaFX] pop up 창 띄우기 (Popup class 이용) (3) | 2016.12.22 |
[JavaFX] JavaFX 폰트 적용하는 법 (2) | 2016.12.15 |
[JavaFX] JavaFX CSS 파일 적용하는 방법 (0) | 2016.12.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 일본 배낭여행
- 자전거
- java
- 인텔리제이
- 일본여행
- git
- effective java
- effectivejava
- 이펙티브자바
- 일본 자전거 여행
- 이펙티브 자바
- Java UI
- 이펙티브
- 방통대 과제물
- 자전거 여행
- JavaFX Table View
- 자바
- JavaFX Window Close
- 텐트
- 배낭여행
- JavaFX 테이블뷰
- JavaFX 종료
- JavaFX
- 배낭 여행
- intelij
- windows
- TableView
- springboot
- 일본 여행
- 스프링부트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함