diff --git a/pom.xml b/pom.xml index 23bdce1edbac5bb248323c73b21bab7097b18c9d..53176fe98a76b0a14c970153c59045ffb8f913f1 100644 --- a/pom.xml +++ b/pom.xml @@ -2,8 +2,8 @@ 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>vsb-cs-java1</groupId> - <artifactId>lab11v3</artifactId> + <groupId>cz.vsb.fei.java2</groupId> + <artifactId>java2-lab02-v3</artifactId> <version>0.0.1-SNAPHOST</version> <packaging>jar</packaging> <properties> diff --git a/src/main/java/lab/App.java b/src/main/java/lab/App.java index 9a2c2db85648a36072ae4149a7d08ed00c682f31..d9b260928b49e77c2ae47234b841b5ffbcad7609 100644 --- a/src/main/java/lab/App.java +++ b/src/main/java/lab/App.java @@ -31,8 +31,7 @@ public class App extends Application { try { this.primaryStage = primaryStage; switchToMenu(); - primaryStage.resizableProperty().set(false); - primaryStage.setTitle("Java 1 - 1th laboratory"); + primaryStage.setTitle("Java 2 - 2th laboratory"); primaryStage.show(); // Exit program when main window is closed primaryStage.setOnCloseRequest(this::exitProgram); diff --git a/src/main/java/lab/DbConnector.java b/src/main/java/lab/DbConnector.java index 9aba4e9d79f07386e26e3b024bde198495a235b2..d7a0594cf69ca3baa2910308fc4b8b8d1cb5b0bb 100644 --- a/src/main/java/lab/DbConnector.java +++ b/src/main/java/lab/DbConnector.java @@ -13,15 +13,15 @@ public class DbConnector { private static final String JDBC_CONECTIN_STRING = "jdbc:h2:file:./scoreDB"; - public static List<Score> getAll() { + public List<Score> getAll() { return queryScore("select * from scores;"); } - public static List<Score> getFirstTen() { + public List<Score> getFirstTen() { return queryScore("select * from scores order by points desc limit 10;"); } - private static List<Score> queryScore(String query) { + private List<Score> queryScore(String query) { List<Score> result = new ArrayList<>(); try (Connection con = DriverManager.getConnection(JDBC_CONECTIN_STRING); Statement stm = con.createStatement(); @@ -35,7 +35,7 @@ public class DbConnector { return result; } - public static void createTable() { + public void init() { try (Connection con = DriverManager.getConnection(JDBC_CONECTIN_STRING); Statement stm = con.createStatement();) { stm.executeUpdate("CREATE TABLE if not exists scores (nick VARCHAR(50) NOT NULL, points INT NOT NULL);"); @@ -44,7 +44,7 @@ public class DbConnector { } } - public static void insertScore(Score score) { + public void insertScore(Score score) { try (Connection con = DriverManager.getConnection(JDBC_CONECTIN_STRING); PreparedStatement stm = con.prepareStatement("INSERT INTO scores VALUES (?, ?)");) { stm.setString(1, score.getName()); diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java index d48fecd0a82017a82c5505f253decabd9bc3ae0e..7e5b0b9fc514dab18015fd89f7771f77b7abf52c 100644 --- a/src/main/java/lab/GameController.java +++ b/src/main/java/lab/GameController.java @@ -73,17 +73,17 @@ public class GameController { void btnGenerateScoreAction(ActionEvent event) { Score score = Score.generate(); this.scores.getItems().add(score); - DbConnector.insertScore(score); + ScoreStorageFactory.getInstance().insertScore(score); } @FXML void btnLoadAllAction(ActionEvent event) { - updateScoreTable(DbConnector.getAll()); + updateScoreTable(ScoreStorageFactory.getInstance().getAll()); } @FXML void btnLoadFirstTenAction(ActionEvent event) { - updateScoreTable(DbConnector.getFirstTen()); + updateScoreTable(ScoreStorageFactory.getInstance().getFirstTen()); } private void updateScoreTable(List<Score> scores) { diff --git a/src/main/java/lab/MainScreenController.java b/src/main/java/lab/MainScreenController.java index 5f844a1ec66882498838666957b2adc919268a5b..56d87154f200b48229f3e3fdd048c667754f3e9f 100644 --- a/src/main/java/lab/MainScreenController.java +++ b/src/main/java/lab/MainScreenController.java @@ -67,17 +67,17 @@ public class MainScreenController { void btnGenerateScoreAction(ActionEvent event) { Score score = Score.generate(); this.scores.getItems().add(score); - DbConnector.insertScore(score); + ScoreStorageFactory.getInstance().insertScore(score); } @FXML void btnLoadAllAction(ActionEvent event) { - updateScoreTable(DbConnector.getAll()); + updateScoreTable(ScoreStorageFactory.getInstance().getAll()); } @FXML void btnLoadFirstTenAction(ActionEvent event) { - updateScoreTable(DbConnector.getFirstTen()); + updateScoreTable(ScoreStorageFactory.getInstance().getFirstTen()); } private void updateScoreTable(List<Score> scores) { @@ -101,8 +101,8 @@ public class MainScreenController { private void initDB() { // Stream.generate(Score::generate).limit(10).toList(); - DbConnector.createTable(); - scores.getItems().addAll(DbConnector.getAll()); + ScoreStorageFactory.getInstance().init(); + scores.getItems().addAll(ScoreStorageFactory.getInstance().getAll()); } } diff --git a/src/main/java/lab/ScoreStorageFactory.java b/src/main/java/lab/ScoreStorageFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..3346de6eb41a256e171e1a9bfb3d6af18ad1b464 --- /dev/null +++ b/src/main/java/lab/ScoreStorageFactory.java @@ -0,0 +1,13 @@ +package lab; + +public class ScoreStorageFactory { + + private static DbConnector instance; + + public static DbConnector getInstance() { + if(instance == null) { + instance = new DbConnector(); + } + return instance; + } +} diff --git a/src/main/resources/lab/mainScreen.fxml b/src/main/resources/lab/mainScreen.fxml index 69c55644281846932963325b133d7b89e288934a..63e59ab2a2cea51bc8a1ee7c547c3b765500d751 100644 --- a/src/main/resources/lab/mainScreen.fxml +++ b/src/main/resources/lab/mainScreen.fxml @@ -13,7 +13,7 @@ <?import javafx.scene.layout.VBox?> <?import javafx.scene.text.Font?> -<BorderPane fx:id="menuPanel" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="436.0" prefWidth="660.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.MainScreenController"> +<BorderPane fx:id="menuPanel" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="519.0" prefWidth="830.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.MainScreenController"> <top> <HBox prefWidth="200.0" BorderPane.alignment="CENTER"> <children> @@ -29,45 +29,47 @@ </font></Button> </bottom> <center> - <HBox prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER"> + <VBox prefHeight="200.0" prefWidth="100.0" BorderPane.alignment="CENTER"> <children> - <RadioButton fx:id="easy" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="difficultButton" text="Easy" HBox.hgrow="ALWAYS"> - <toggleGroup> - <ToggleGroup fx:id="difficult" /> - </toggleGroup> - <HBox.margin> - <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> - </HBox.margin> - </RadioButton> - <RadioButton fx:id="medium" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" selected="true" styleClass="difficultButton" text="Medium" toggleGroup="$difficult" HBox.hgrow="ALWAYS"> - <HBox.margin> - <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> - </HBox.margin> - </RadioButton> - <RadioButton fx:id="hard" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="difficultButton" text="Hard" toggleGroup="$difficult" HBox.hgrow="ALWAYS"> - <HBox.margin> - <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> - </HBox.margin> - </RadioButton> - </children> - </HBox> - </center> - <right> - <VBox prefHeight="267.0" prefWidth="156.0" BorderPane.alignment="CENTER"> - <children> - <TableView fx:id="scores" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308"> - <columns> - <TableColumn fx:id="nickColumn" prefWidth="75.0" text="Nick" /> - <TableColumn fx:id="pointsColumn" prefWidth="75.0" text="Points" /> - </columns> - <columnResizePolicy> - <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> - </columnResizePolicy> - </TableView> - <Button fx:id="btnGenerateScore" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#btnGenerateScoreAction" text="Generate new score" /> - <Button fx:id="btnLoadAll" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#btnLoadAllAction" text="Load all from DB" /> - <Button fx:id="btnLoadFirstTen" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#btnLoadFirstTenAction" text="Load first 10 from DB" /> + <HBox prefHeight="100.0" prefWidth="200.0"> + <children> + <RadioButton fx:id="easy" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="difficultButton" text="Easy" HBox.hgrow="ALWAYS"> + <toggleGroup> + <ToggleGroup fx:id="difficult" /> + </toggleGroup> + <HBox.margin> + <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> + </HBox.margin> + </RadioButton> + <RadioButton fx:id="medium" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" selected="true" styleClass="difficultButton" text="Medium" toggleGroup="$difficult" HBox.hgrow="ALWAYS"> + <HBox.margin> + <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> + </HBox.margin> + </RadioButton> + <RadioButton fx:id="hard" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" mnemonicParsing="false" styleClass="difficultButton" text="Hard" toggleGroup="$difficult" HBox.hgrow="ALWAYS"> + <HBox.margin> + <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" /> + </HBox.margin> + </RadioButton> + </children> + </HBox> + <VBox> + <children> + <TableView fx:id="scores" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="2000.0"> + <columns> + <TableColumn fx:id="nickColumn" prefWidth="75.0" text="Nick" /> + <TableColumn fx:id="pointsColumn" prefWidth="75.0" text="Points" /> + </columns> + <columnResizePolicy> + <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> + </columnResizePolicy> + </TableView> + <Button fx:id="btnGenerateScore" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#btnGenerateScoreAction" text="Generate new score" /> + <Button fx:id="btnLoadAll" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#btnLoadAllAction" text="Load all from DB" /> + <Button fx:id="btnLoadFirstTen" maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#btnLoadFirstTenAction" text="Load first 10 from DB" /> + </children> + </VBox> </children> </VBox> - </right> + </center> </BorderPane>