Search

์ ๋ฉ”์ถ” ํ”„๋กœ๊ทธ๋žจ

์ ๋ฉ”์ถ” ํ”„๋กœ๊ทธ๋žจ

1.
๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
a.
๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ 20๊ฐœ
b.
๋ฉ”๋‰ด ์ด๋ฏธ์ง€ 20๊ฐœ
2.
ํ™”๋ฉด
a.
ํ”„๋กœ๊ทธ๋žจ ์ œ๋ชฉ ๋ผ๋ฒจ
b.
์ด๋ฏธ์ง€ ์˜์—ญ
c.
๋ฉ”๋‰ด ์ด๋ฆ„ ๋ผ๋ฒจ
d.
์ถ”์ฒœ ๋ฒ„ํŠผ
3.
๊ธฐ๋Šฅ
a.
Menu ๊ฐ์ฒด ์ •์˜
i.
name : ๋ฉ”๋‰ด์ด๋ฆ„
ii.
img : ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ฒฝ๋กœ
b.
๋žœ๋ค ์ถ”์ฒœ ๊ธฐ๋Šฅ
i.
์ถ”์ฒœ ๋ฒ„ํŠผ ํด๋ฆญ ๋ฉ”์†Œ๋“œ ์—ฐ๊ฒฐ
ii.
20๊ฐœ์˜ ๋ฉ”๋‰ด ์š”์†Œ๋“ค ์ค‘, ๋žœ๋ค์œผ๋กœ ํ•˜๋‚˜ ์„ ํƒ
iii.
์„ ํƒ๋œ ์ˆซ์ž์˜ ๋ฉ”๋‰ด ์ด๋ฆ„์„ ๋ผ๋ฒจ์— ๋ณ€๊ฒฝ
iv.
์„ ํƒ๋œ ์ˆซ์ž์˜ ๋ฉ”๋‰ด ์ด๋ฏธ์ง€๋ฅผ ์ด๋ฏธ์ง€ ์˜์—ญ์— ์ง€์ •

์‹คํ–‰ํ™”๋ฉด

ํ”„๋กœ์ ํŠธ ํŠธ๋ฆฌ๊ตฌ์กฐ

๐Ÿ“ฆ ์ ๋ฉ”์ถ” โ”œโ”€โ”€ ๐Ÿ“ src โ”‚ โ”œโ”€โ”€ ๐Ÿ“ application โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ย Main.java โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“œย Main.fxml โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ย MainController.java โ”‚ โ”‚ โ”œโ”€โ”€ ๐Ÿ“„ย Menu.java โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ“œย application.css โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ“ img โ”‚ โ”‚ โ””โ”€โ”€ ๐Ÿ–ผ ๋ฉ”๋‰ด.jpg โ”‚ โ””โ”€โ”€ ๐Ÿ“ƒ module-info.java โ””โ”€โ”€ ๐Ÿ“ lib โ””โ”€โ”€ ๐Ÿ“š lombok.jar
Plain Text
๋ณต์‚ฌ

์ž‘์—…์ˆœ์„œ

1.
๋ฉ”๋‰ด ์ด๋ฏธ์ง€ ์ค€๋น„ํ•˜๊ธฐ
a.
์ด๋ฏธ์ง€ 20๊ฐœ ๋‹ค์šด๋กœ๋“œ
b.
src ํด๋” ๋ฐ‘์— img ํด๋” ๋งŒ๋“ค๊ธฐ
c.
img ํด๋”์— ์ด๋ฏธ์ง€ ๋„ฃ๊ธฐ
2.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค€๋น„ํ•˜๊ธฐ
a.
ํ”„๋กœ์ ํŠธ ๋ฐ‘์— lib ํด๋” ๋งŒ๋“ค๊ธฐ
b.
lombok.jar ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„ฃ๊ธฐ
c.
Build Path ์— ์ถ”๊ฐ€ํ•˜๊ธฐ
i.
ํ”„๋กœ์ ํŠธ ์šฐํด๋ฆญ
ii.
Build Path
iii.
Configure Build Path
1.
Module Path ํด๋ฆญ
2.
Add Jarโ€ฆ
3.
lombok.jar ์„ ํƒ
3.
๋ชจ๋“ˆ ์„ค์ •
a.
module-info.java
b.
fxml ๋ชจ๋“ˆ ๊ตฌ์„ฑ
requires javafx.fxml;
Java
๋ณต์‚ฌ
c.
lombok ๋ชจ๋“ˆ ๊ตฌ์„ฑ
requires lombok;
Java
๋ณต์‚ฌ
4.
ํ™”๋ฉด ๊ทธ๋ฆฌ๊ธฐ
a.
Main.fxml ํŒŒ์ผ ์ƒ์„ฑ
b.
Scene Builder ๋กœ ํ™”๋ฉด ๊ทธ๋ฆฌ๊ธฐ
i.
AnchorPane ๋ฃจํŠธ ์ปจํ…Œ์ด๋„ˆ ์ง€์ •
ii.
Label โ€œ์ ๋ฉ”์ถ”โ€
iii.
Pane ์ปจํ…Œ์ด๋„ˆ
1.
ImageView
a.
๊ธฐ๋ณธ ์ด๋ฏธ์ง€ icon.png
b.
fx:id=โ€imgโ€
iv.
Label โ€œ๋ฉ”๋‰ด ์ด๋ฆ„โ€
1.
fx:id=โ€menuโ€
v.
Button โ€œ์ถ”์ฒœโ€
1.
onAction=โ€randomโ€
5.
Menu ํด๋ž˜์Šค ์ •์˜
a.
Menu.java ์ƒ์„ฑ
i.
๋ฉ”๋‰ด์ด๋ฆ„ : String menu
ii.
ํŒŒ์ผ์ด๋ฆ„ : String img
b.
Lombok ์ ์šฉ
i.
@Data : @Getter, @Setter, @ToString, @RequiredArgsConstructor, โ€ฆ
ii.
@NoArgsConstructor : ๊ธฐ๋ณธ ์ƒ์„ฑ์ž
iii.
@AllArgsConstructor : ์ „์ฒด ๋งค๊ฐœ๋ณ€์ˆ˜ ์ƒ์„ฑ์ž
6.
Main ํด๋ž˜์Šค ์ •์˜
a.
Main.fxml ๋กœ ํ™”๋ฉด์ด ์ดˆ๊ธฐํ™”๋ฉด์ด ์—ด๋ฆฌ๋„๋ก ์ฝ”๋“œ ์ž‘์„ฑ
7.
MainController.java ์ปจํŠธ๋กค๋Ÿฌ ์ •์˜
a.
SceneBuilder ์—์„œ Controller ๋กœ ์ง€์ • : application.MainController
b.
์ปจํŠธ๋กค๋Ÿฌ ์ž๋™ ์ƒ์„ฑ
i.
View
1.
Show Sample Controller Skeleton
2.
Save as
3.
์ €์žฅ
c.
์ฝ”๋“œ ์ž‘์„ฑ

์ฝ”๋“œ

module-info.java
ย Main.java
ย Main.fxml
ย MainController.java
ย Menu.java

module-info.java

module ์ ๋ฉ”์ถ” { requires javafx.controls; requires javafx.fxml; requires lombok; opens application to javafx.graphics, javafx.fxml; }
Java
๋ณต์‚ฌ

ย Main.fxml

<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> <?import javafx.scene.image.Image?> <?import javafx.scene.image.ImageView?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.Pane?> <?import javafx.scene.text.Font?> <AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/25" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.MainController"> <children> <Label alignment="CENTER" layoutX="210.0" layoutY="39.0" prefHeight="45.0" prefWidth="181.0" text="์ ๋ฉ”์ถ”"> <font> <Font size="40.0" /> </font> </Label> <Pane layoutX="150.0" layoutY="123.0" prefHeight="300.0" prefWidth="300.0"> <children> <ImageView fx:id="img" fitHeight="250.0" fitWidth="250.0" layoutX="25.0" layoutY="25.0" pickOnBounds="true" preserveRatio="true"> <image> <Image url="@../img/icon.png" /> </image> </ImageView> </children> </Pane> <Label fx:id="menu" alignment="CENTER" layoutX="210.0" layoutY="437.0" prefHeight="45.0" prefWidth="181.0" text="๋ฉ”๋‰ด"> <font> <Font size="30.0" /> </font> </Label> <Button fx:id="button" layoutX="176.0" layoutY="512.0" mnemonicParsing="false" onAction="#random" prefHeight="50.0" prefWidth="250.0" text="์ถ”์ฒœ"> <font> <Font size="30.0" /> </font> </Button> </children> </AnchorPane>
XML
๋ณต์‚ฌ

ย Main.java

package application; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { private static Scene scene; public static Stage stage; /** * ํ™”๋ฉด ์‹œ์ž‘ ๋ฉ”์†Œ๋“œ * @throws Exception */ @Override public void start(Stage primaryStage) throws Exception { stage = primaryStage; // Main.fxml ํ™”๋ฉด ํŒŒ์ผ์„ ๋กœ๋“œ Parent container = loadFXML("Main"); // Main.fxml ํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ์„ ์ง€์ •ํ•˜์—ฌ Scene ์ƒ์„ฑ scene = new Scene(container); // Stage ์— Scene ๋“ฑ๋ก stage.setScene(scene); // Stage ์ถœ๋ ฅ stage.show(); } /** * Scene ์— FXML ๋กœ ๋ถˆ๋Ÿฌ์˜จ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฉ”์†Œ๋“œ * @param fxml * @throws Exception */ public static void setRoot(String fxml) throws Exception { scene.setRoot( loadFXML(fxml) ); Main.stage.sizeToScene(); // FXML ์— ์ง€์ •ํ•œ ํฌ๊ธฐ๋กœ ์œˆ๋„์šฐ ํฌ๊ธฐ ๋ณ€๊ฒฝ } /** * FXML ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฉ”์†Œ๋“œ * @param fxml * @return * @throws Exception */ public static Parent loadFXML(String fxml) throws Exception { FXMLLoader fxmlLoader = new FXMLLoader(Main.class.getResource(fxml + ".fxml")); return fxmlLoader.load(); } public static void main(String[] args) { launch(args); } }
Java
๋ณต์‚ฌ

ย Menu.java

package application; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.RequiredArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class Menu { String menu; // ๋ฉ”๋‰ด ์ด๋ฆ„ String img; // ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ }
Java
๋ณต์‚ฌ

ย MainController.java

package application; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.util.Duration; public class MainController { @FXML private Button button; @FXML private ImageView img; @FXML private Label menu; // ๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ private static List<Menu> MENU_LIST; // ํƒ€์ด๋จธ1 - 0.05 ์ดˆ๋งˆ๋‹ค ๋ฉ”๋‰ด๋ณ€๊ฒฝ ํƒ€์ด๋จธ private Timeline rotate = null; // ํƒ€์ด๋จธ2 - 3์ดˆ ๋’ค ๋žœ๋ค๋ฉ”๋‰ด๋ฅผ ๊ณ ๋ฅด๋Š” ํƒ€์ด๋จธ private Timeline stop = null; /** * FXML ์ด ๋กœ๋”ฉ๋  ๋•Œ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์†Œ๋“œ * * ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” * * ์ด๋ฒคํŠธ ๋“ฑ๋ก */ @FXML public void initialize() { // ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” initData(); // ํƒ€์ด๋จธ ์„ธํŒ… initTimer(); } /** * ๋ฐ์ดํ„ฐ ์ดˆ๊ธฐํ™” */ void initData() { MENU_LIST = new ArrayList<Menu>(); List<String> nameList = Arrays.asList("๊ตญ๋ฐฅ","๊ทœ์นด์ธ ","๊น€๋ฐฅ","๋ˆ๊นŒ์Šค","๋–ก๋ณถ์ด", "๋งˆ๋ผํƒ•","๋ถ€๋Œ€์ฐŒ๊ฐœ","์‚ผ๊ฒน์‚ด","์‡ผ์ขŒ๋น™","์Šคํ…Œ์ดํฌ", "์šฐ๋™","์œกํšŒ","์ดˆ๋ฐฅ","์น˜ํ‚จ","์นด๋ ˆ", "ํ…๋™","ํŒŒ์Šคํƒ€","ํ”ผ์ž","ํ•จ๋ฐ•์Šคํ…Œ์ดํฌ","ํ–„๋ฒ„๊ฑฐ"); List<String> imgList = Arrays.asList("๊ตญ๋ฐฅ.jpg","๊ทœ์นด์ธ .jpg","๊น€๋ฐฅ.jpg","๋ˆ๊นŒ์Šค.jpg","๋–ก๋ณถ์ด.jpg", "๋งˆ๋ผํƒ•.jpg","๋ถ€๋Œ€์ฐŒ๊ฐœ.jpg","์‚ผ๊ฒน์‚ด.jpg","์‡ผ์ขŒ๋น™.jpg","์Šคํ…Œ์ดํฌ.jpg", "์šฐ๋™.jpg","์œกํšŒ.jpg","์ดˆ๋ฐฅ.jpg","์น˜ํ‚จ.jpg","์นด๋ ˆ.jpg", "ํ…๋™.jpg","ํŒŒ์Šคํƒ€.jpg","ํ”ผ์ž.jpg","ํ•จ๋ฐ•์Šคํ…Œ์ดํฌ.jpg","ํ–„๋ฒ„๊ฑฐ.jpg"); for (int i = 0; i < 20; i++) { String name = nameList.get(i); String img = imgList.get(i); MENU_LIST.add( new Menu(name, img) ); } } /** * ํƒ€์ด๋จธ ์„ธํŒ… */ public void initTimer() { // 0.05์ดˆ ๋งˆ๋‹ค ๋žœ๋ค ํƒ€์ด๋จธ rotate = new Timeline( new KeyFrame(Duration.millis(50), e -> { // ๋žœ๋ค ๋ฉ”๋‰ด ์„ธํŒ… setMenu(); }) ); rotate.setCycleCount( Timeline.INDEFINITE ); // 3์ดˆ ๋’ค์— ๋ฉ”๋‰ด ๊ณ ๋ฅด๋Š” ํƒ€์ด๋จธ stop = new Timeline( new KeyFrame( Duration.millis(3000), e -> rotate.stop() ) ); stop.setCycleCount(1); } /** * ๋žœ๋ค ๋ฉ”๋‰ด ๋ฝ‘๊ธฐ */ public void setMenu() { // 20๊ฐœ์˜ ๋ฉ”๋‰ด ์š”์†Œ๋“ค ์ค‘, ๋žœ๋ค์œผ๋กœ ํ•˜๋‚˜ ์„ ํƒ Random random = new Random(); int index = random.nextInt(20); Menu randomMenu = MENU_LIST.get(index); String menuName = randomMenu.getMenu(); String menuImg = randomMenu.getImg(); // ๋ฉ”๋‰ด๋ช… ๋ผ๋ฒจ์— ์ง€์ • menu.setText( menuName ); // ๋ฉ”๋‰ด ์ด๋ฏธ์ง€ ์ง€์ • String filePath = getClass().getResource("/img/" + menuImg).toExternalForm(); img.setImage( new Image(filePath) ); } @FXML void random(ActionEvent event) { // ์ด์ „ ํƒ€์ด๋จธ ์ค‘์ง€ rotate.stop(); stop.stop(); // ํƒ€์ด๋จธ ์‹œ์ž‘ rotate.play(); stop.play(); } }
Java
๋ณต์‚ฌ