Search

FXML

FXML

FXML은 JavaFX μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜λŠ” XML 기반의 λ§ˆν¬μ—… μ–Έμ–΄μž…λ‹ˆλ‹€.
UI μ»΄ν¬λ„ŒνŠΈμ˜ λ ˆμ΄μ•„μ›ƒκ³Ό 속성을 μ„ μ–Έμ μœΌλ‘œ μ •μ˜ν•  수 μžˆμ–΄ Java μ½”λ“œμ™€ UI λ””μžμΈμ„ λΆ„λ¦¬ν•˜μ—¬ 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
Scene Builder와 같은 μ‹œκ°μ  도ꡬλ₯Ό μ‚¬μš©ν•˜μ—¬ FXML νŒŒμΌμ„ μ‰½κ²Œ μƒμ„±ν•˜κ³  νŽΈμ§‘ν•  수 있으며, μ΄λŠ” MVC(Model-View-Controller) νŒ¨ν„΄μ„ κ΅¬ν˜„ν•˜λŠ” 데 도움이 λ©λ‹ˆλ‹€.
XML(eXtensible Markup Language)
데이터λ₯Ό 전솑 양식 λ˜λŠ” μ‚¬μš©μž ν™•μž₯ νƒœκ·Έλ₯Ό μœ„ν•œ λ§ˆν¬μ—… μ–Έμ–΄μž…λ‹ˆλ‹€. νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•˜λ©°, μ‚¬μš©μžκ°€ 직접 νƒœκ·Έλ₯Ό λ§Œλ“€ 수 μžˆμ–΄ ν™•μž₯성이 λ›°μ–΄λ‚©λ‹ˆλ‹€. μ›Ή μ„œλΉ„μŠ€, 데이터 κ΅ν™˜, μ„€μ • 파일 λ“± λ‹€μ–‘ν•œ μš©λ„λ‘œ ν™œμš©λ©λ‹ˆλ‹€.

핡심 μš”μ†Œ

μš”μ†Œ
μ„€λͺ…
AnchorPane
κ³ μ •λœ μœ„μΉ˜μ— UI μš”μ†Œ 배치
BorderPane
상, ν•˜, 쒌, 우, 쀑앙 5개 μ˜μ—­μœΌλ‘œ UI 배치
VBox
μ„Έλ‘œ λ°©ν–₯으둜 UI μš”μ†Œ μ •λ ¬
HBox
κ°€λ‘œ λ°©ν–₯으둜 UI μš”μ†Œ μ •λ ¬
GridPane
ν–‰κ³Ό μ—΄μ˜ 격자 ν˜•νƒœλ‘œ UI 배치
StackPane
μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό κ²Ήμ³μ„œ 배치
TextField
ν•œ 쀄 ν…μŠ€νŠΈ μž…λ ₯ ν•„λ“œ
PasswordField
λΉ„λ°€λ²ˆν˜Έ μž…λ ₯ ν•„λ“œ
Button
λ²„νŠΌ 생성
Label
ν…μŠ€νŠΈ 라벨 ν‘œμ‹œ
TableView
ν…Œμ΄λΈ” ν˜•μ‹μ˜ 데이터 ν‘œμ‹œ
ListView
리슀트 ν˜•νƒœλ‘œ 데이터 ν‘œμ‹œ
ImageView
이미지 좜λ ₯
MenuBar
메뉴바 μΆ”κ°€

문법 사항

문법 μš”μ†Œ
μ„€λͺ…
예제
XML μ„ μ–Έ
FXML 파일의 μ‹œμž‘
<?xml version="1.0" encoding="UTF-8"?>
루트 μ»¨ν…Œμ΄λ„ˆ
UI의 μ΅œμƒμœ„ μš”μ†Œ
<VBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
속성 지정
μš”μ†Œμ˜ 속성 μ„€μ •
<Button text="클릭"/>
이벀트 ν•Έλ“€λŸ¬
컨트둀의 이벀트 μ„€μ •
<Button onAction="#handleClick"/>
컨트둀 ID
FXML μ»¨νŠΈλ‘€μ„ Javaμ—μ„œ μ°Έμ‘° κ°€λŠ₯ν•˜κ²Œ μ„€μ •
<TextField fx:id="usernameField"/>
include νƒœκ·Έ
λ‹€λ₯Έ FXML 파일 포함
<fx:include source="header.fxml"/>

곡톡 속성

속성
μ„€λͺ…
예제
fx:id
μ»¨νŠΈλ‘€μ„ Java μ½”λ“œμ—μ„œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ„€μ •
<Button fx:id="submitButton"/>
text
λ²„νŠΌμ΄λ‚˜ 라벨 λ“±μ˜ ν…μŠ€νŠΈ μ„€μ •
<Label text="Hello, JavaFX!"/>
onAction
λ²„νŠΌ 클릭 λ“±μ˜ 이벀트 μ„€μ •
<Button onAction="#handleClick"/>
alignment
μ •λ ¬ 방식 μ„€μ •
<VBox alignment="CENTER"/>
spacing
μžμ‹ μš”μ†Œ 간격
<VBox spacing="10"/>
padding
μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€ μ—¬λ°± μ„€μ •
<VBox padding="10"/>

예제 μ½”λ“œ

(1) 둜그인 ν™”λ©΄ (login.fxml)

<?xml version="1.0" encoding="UTF-8"?> <VBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" alignment="CENTER" spacing="10"> <Label text="둜그인"/> <TextField fx:id="usernameField" promptText="아이디"/> <PasswordField fx:id="passwordField" promptText="λΉ„λ°€λ²ˆν˜Έ"/> <Button text="둜그인" onAction="#handleLogin"/> </VBox>
XML
볡사

(2) νšŒμ›κ°€μž… ν™”λ©΄ (register.fxml)

<?xml version="1.0" encoding="UTF-8"?> <VBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" alignment="CENTER" spacing="10"> <Label text="νšŒμ›κ°€μž…"/> <TextField fx:id="nameField" promptText="이름"/> <TextField fx:id="emailField" promptText="이메일"/> <PasswordField fx:id="passwordField" promptText="λΉ„λ°€λ²ˆν˜Έ"/> <Button text="κ°€μž…ν•˜κΈ°" onAction="#handleRegister"/> </VBox>
XML
볡사

(3) μ•„μ΄μ½˜ λ²„νŠΌ κ·Έλ¦¬λ“œ 링크 ν™”λ©΄ (icon_grid.fxml)

<?xml version="1.0" encoding="UTF-8"?> <GridPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" hgap="10" vgap="10" alignment="CENTER"> <Button text="ν™ˆ" GridPane.rowIndex="0" GridPane.columnIndex="0"/> <Button text="μ„€μ •" GridPane.rowIndex="0" GridPane.columnIndex="1"/> <Button text="ν”„λ‘œν•„" GridPane.rowIndex="1" GridPane.columnIndex="0"/> <Button text="λ‘œκ·Έμ•„μ›ƒ" GridPane.rowIndex="1" GridPane.columnIndex="1"/> </GridPane>
XML
볡사

(4) κ²Œμ‹œνŒ λͺ©λ‘ ν™”λ©΄ (board.fxml)

<?xml version="1.0" encoding="UTF-8"?> <BorderPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <top> <Label text="κ²Œμ‹œνŒ λͺ©λ‘" style="-fx-font-size: 16px;"/> </top> <center> <TableView fx:id="boardTable"> <columns> <TableColumn text="번호" fx:id="colId"/> <TableColumn text="제λͺ©" fx:id="colTitle"/> <TableColumn text="μž‘μ„±μž" fx:id="colAuthor"/> <TableColumn text="λ‚ μ§œ" fx:id="colDate"/> </columns> </TableView> </center> <bottom> <HBox alignment="CENTER" spacing="10"> <Button text="μƒˆ κΈ€ μž‘μ„±" onAction="#handleNewPost"/> </HBox> </bottom> </BorderPane>
XML
볡사