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
๋ณต์‚ฌ