From 64ae9502d51547002da52d04668b646fec2ae4b3 Mon Sep 17 00:00:00 2001 From: jez04 <david.jezek@post.cz> Date: Tue, 13 Feb 2024 14:50:30 +0100 Subject: [PATCH] feat: initial src --- .gitignore | 16 ++++ pom.xml | 76 +++++++++++++++ src/main/java/cz/vsb/fei/java2/lab03/App.java | 52 +++++++++++ .../cz/vsb/fei/java2/lab03/AppController.java | 20 ++++ .../cz/vsb/fei/java2/lab03/ColorPoint.java | 14 +++ .../vsb/fei/java2/lab03/NutritionFacts.java | 37 ++++++++ .../java/cz/vsb/fei/java2/lab03/Point.java | 14 +++ src/main/java/module-info.java | 8 ++ .../cz/vsb/fei/java2/lab03/AppWindow.fxml | 93 +++++++++++++++++++ .../cz/vsb/fei/java2/lab03/application.css | 1 + src/main/resources/log4j2.xml | 13 +++ .../java/cz/vsb/fei/java2/lab03/AppTest.java | 19 ++++ 12 files changed, 363 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/cz/vsb/fei/java2/lab03/App.java create mode 100644 src/main/java/cz/vsb/fei/java2/lab03/AppController.java create mode 100644 src/main/java/cz/vsb/fei/java2/lab03/ColorPoint.java create mode 100644 src/main/java/cz/vsb/fei/java2/lab03/NutritionFacts.java create mode 100644 src/main/java/cz/vsb/fei/java2/lab03/Point.java create mode 100644 src/main/java/module-info.java create mode 100644 src/main/resources/cz/vsb/fei/java2/lab03/AppWindow.fxml create mode 100644 src/main/resources/cz/vsb/fei/java2/lab03/application.css create mode 100644 src/main/resources/log4j2.xml create mode 100644 src/test/java/cz/vsb/fei/java2/lab03/AppTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7f69afd --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Eclipse +.classpath +.project +.settings/ + +# Intellij +.idea/ +*.iml +*.iws + +# Mac +.DS_Store + +# Maven +log/ +target/ \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..65445d6 --- /dev/null +++ b/pom.xml @@ -0,0 +1,76 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>cz.vsb.fei.java2</groupId> + <artifactId>lab03</artifactId> + <version>0.0.1-SNAPSHOT</version> + + <name>lab03</name> + + <packaging>jar</packaging> + + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <maven.compiler.release>21</maven.compiler.release> + <JavaFX.version>22-ea+16</JavaFX.version> + <JUnit.version>5.10.1</JUnit.version> + <log4j.version>2.22.1</log4j.version> + <lombok.version>1.18.30</lombok.version> + </properties> + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.junit</groupId> + <artifactId>junit-bom</artifactId> + <version>${JUnit.version}</version> + <type>pom</type> + <scope>import</scope> + </dependency> + </dependencies> + </dependencyManagement> + + <dependencies> + <dependency> + <groupId>org.openjfx</groupId> + <artifactId>javafx-controls</artifactId> + <version>${JavaFX.version}</version> + </dependency> + <dependency> + <groupId>org.openjfx</groupId> + <artifactId>javafx-fxml</artifactId> + <version>${JavaFX.version}</version> + </dependency> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-core</artifactId> + <version>${log4j.version}</version> + </dependency> + <dependency> + <groupId>org.apache.logging.log4j</groupId> + <artifactId>log4j-api</artifactId> + <version>${log4j.version}</version> + </dependency> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + <scope>provided</scope> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <version>3.2.1</version> + </plugin> + </plugins> + </build> + +</project> diff --git a/src/main/java/cz/vsb/fei/java2/lab03/App.java b/src/main/java/cz/vsb/fei/java2/lab03/App.java new file mode 100644 index 0000000..d21c415 --- /dev/null +++ b/src/main/java/cz/vsb/fei/java2/lab03/App.java @@ -0,0 +1,52 @@ +package cz.vsb.fei.java2.lab03; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Scene; +import javafx.scene.layout.BorderPane; +import javafx.stage.Stage; +import javafx.stage.WindowEvent; +import lombok.extern.log4j.Log4j2; + +/** + * Class <b>App</b> - extends class Application and it is an entry point of the program + * @author Java I + */ +@Log4j2 +public class App extends Application { + + public static void main(String[] args) { + log.info("Launching JavaFX application."); + launch(args); + } + + private AppController controller; + + @Override + public void start(Stage primaryStage) { + try { + //Construct a main window with a canvas. + + FXMLLoader loader = new FXMLLoader(this.getClass().getResource("AppWindow.fxml")); + + BorderPane root = loader.load(); + + Scene scene = new Scene(root); + + + primaryStage.setScene(scene); + primaryStage.setTitle("Hello word app"); + primaryStage.show(); + controller = loader.getController(); + + //Exit program when main window is closed + primaryStage.setOnCloseRequest(this::exitProgram); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void exitProgram(WindowEvent evt) { + System.exit(0); + } +} \ No newline at end of file diff --git a/src/main/java/cz/vsb/fei/java2/lab03/AppController.java b/src/main/java/cz/vsb/fei/java2/lab03/AppController.java new file mode 100644 index 0000000..3b61339 --- /dev/null +++ b/src/main/java/cz/vsb/fei/java2/lab03/AppController.java @@ -0,0 +1,20 @@ +package cz.vsb.fei.java2.lab03; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.Label; +import javafx.scene.control.MenuItem; + +public class AppController { + + @FXML + private Label infoLabel; + + @FXML + private void menuPressed(ActionEvent event) { + if(event.getSource() instanceof MenuItem menuItem) { + infoLabel.setText("Selected menu: " + menuItem.getText()); + } + } + +} diff --git a/src/main/java/cz/vsb/fei/java2/lab03/ColorPoint.java b/src/main/java/cz/vsb/fei/java2/lab03/ColorPoint.java new file mode 100644 index 0000000..16722be --- /dev/null +++ b/src/main/java/cz/vsb/fei/java2/lab03/ColorPoint.java @@ -0,0 +1,14 @@ +package cz.vsb.fei.java2.lab03; + +import javafx.scene.paint.Color; + +public class ColorPoint extends Point { + + private Color color; + + public ColorPoint(double x, double y, Color color) { + super(x, y); + this.color = color; + } + +} diff --git a/src/main/java/cz/vsb/fei/java2/lab03/NutritionFacts.java b/src/main/java/cz/vsb/fei/java2/lab03/NutritionFacts.java new file mode 100644 index 0000000..7752e36 --- /dev/null +++ b/src/main/java/cz/vsb/fei/java2/lab03/NutritionFacts.java @@ -0,0 +1,37 @@ +package cz.vsb.fei.java2.lab03; + +public class NutritionFacts { + private final int servingSize;// (mL)required + private final int servings;// (per container) required + private final int calories;// (per serving)optional + private final int fat;// (g/serving)optional + private final int sodium;// (mg/serving)optional + private final int carbohydrate; // (g/serving) optional + + public NutritionFacts(int servingSize, int servings) { + this(servingSize, servings, 0); + } + + public NutritionFacts(int servingSize, int servings, int calories) { + this(servingSize, servings, calories, 0); + } + + public NutritionFacts(int servingSize, int servings, int calories, int fat) { + this(servingSize, servings, calories, fat, 0); + } + + public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium) { + this(servingSize, servings, calories, fat, sodium, 0); + } + + public NutritionFacts(int servingSize, int servings, int calories, int fat, int sodium, int carbohydrate) { + this.servingSize = servingSize; + this.servings = servings; + this.calories = calories; + this.fat = fat; + this.sodium = sodium; + this.carbohydrate = carbohydrate; + } +} + + diff --git a/src/main/java/cz/vsb/fei/java2/lab03/Point.java b/src/main/java/cz/vsb/fei/java2/lab03/Point.java new file mode 100644 index 0000000..cc34fbc --- /dev/null +++ b/src/main/java/cz/vsb/fei/java2/lab03/Point.java @@ -0,0 +1,14 @@ +package cz.vsb.fei.java2.lab03; + +public class Point { + + private double x; + + private double y; + + public Point(double x, double y) { + this.x = x; + this.y = y; + } + +} \ No newline at end of file diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java new file mode 100644 index 0000000..5627ddd --- /dev/null +++ b/src/main/java/module-info.java @@ -0,0 +1,8 @@ +module cz.vsb.fei.java2.lab03 { + requires transitive javafx.controls; + requires javafx.fxml; + requires lombok; + requires org.apache.logging.log4j; + opens cz.vsb.fei.java2.lab03 to javafx.fxml; + exports cz.vsb.fei.java2.lab03; +} \ No newline at end of file diff --git a/src/main/resources/cz/vsb/fei/java2/lab03/AppWindow.fxml b/src/main/resources/cz/vsb/fei/java2/lab03/AppWindow.fxml new file mode 100644 index 0000000..6a81cb7 --- /dev/null +++ b/src/main/resources/cz/vsb/fei/java2/lab03/AppWindow.fxml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + Copyright (c) 2015, 2019, Gluon and/or its affiliates. + All rights reserved. Use is subject to license terms. + + This file is available and licensed under the following license: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + - Neither the name of Oracle Corporation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +--> + +<?import javafx.scene.control.Label?> +<?import javafx.scene.control.Menu?> +<?import javafx.scene.control.MenuBar?> +<?import javafx.scene.control.MenuItem?> +<?import javafx.scene.control.SeparatorMenuItem?> +<?import javafx.scene.layout.BorderPane?> +<?import javafx.scene.text.Font?> + + +<BorderPane minHeight="400.0" minWidth="640.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cz.vsb.fei.java2.lab03.AppController"> + <top> + <MenuBar BorderPane.alignment="CENTER"> + <menus> + <Menu mnemonicParsing="false" text="File"> + <items> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="New" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Open…" /> + <Menu mnemonicParsing="false" text="Open Recent" /> + <SeparatorMenuItem mnemonicParsing="false" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Close" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Save" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Save As…" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Revert" /> + <SeparatorMenuItem mnemonicParsing="false" onAction="#menuPressed" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Preferences…" /> + <SeparatorMenuItem mnemonicParsing="false" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Quit" /> + </items> + </Menu> + <Menu mnemonicParsing="false" text="Edit"> + <items> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Undo" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Redo" /> + <SeparatorMenuItem mnemonicParsing="false" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Cut" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Copy" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Paste" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Delete" /> + <SeparatorMenuItem mnemonicParsing="false" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Select All" /> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="Unselect All" /> + </items> + </Menu> + <Menu mnemonicParsing="false" text="Help"> + <items> + <MenuItem mnemonicParsing="false" onAction="#menuPressed" text="About MyHelloApp" /> + </items> + </Menu> + </menus> + </MenuBar> + </top> + <center> + <Label fx:id="infoLabel" alignment="CENTER" style=" " text="Drag components from Library here…" textAlignment="CENTER" textFill="#9f9f9f" wrapText="false" BorderPane.alignment="CENTER"> + <font> + <Font size="18.0" /> + </font> + </Label> + </center> +</BorderPane> diff --git a/src/main/resources/cz/vsb/fei/java2/lab03/application.css b/src/main/resources/cz/vsb/fei/java2/lab03/application.css new file mode 100644 index 0000000..83d6f33 --- /dev/null +++ b/src/main/resources/cz/vsb/fei/java2/lab03/application.css @@ -0,0 +1 @@ +/* JavaFX CSS - Leave this comment until you have at least create one rule which uses -fx-Property */ \ No newline at end of file diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..acb3514 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,13 @@ +<Configuration> + <Appenders> + <Console name="Console"> + <PatternLayout + pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> + </Console> + </Appenders> + <Loggers> + <Root level="info"> + <AppenderRef ref="Console"></AppenderRef> + </Root> + </Loggers> +</Configuration> diff --git a/src/test/java/cz/vsb/fei/java2/lab03/AppTest.java b/src/test/java/cz/vsb/fei/java2/lab03/AppTest.java new file mode 100644 index 0000000..9c5b554 --- /dev/null +++ b/src/test/java/cz/vsb/fei/java2/lab03/AppTest.java @@ -0,0 +1,19 @@ +package cz.vsb.fei.java2.lab03; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.Test; + +/** + * Unit test for simple App. + */ +class AppTest { + + /** + * Rigorous Test :-) + */ + @Test + void shouldAnswerWithTrue() { + assertTrue(true); + } +} -- GitLab