From 91315e47c45b80b4525283b87f1e214088116773 Mon Sep 17 00:00:00 2001 From: Eilert Tunheim <emtunhei@stud.ntnu.no> Date: Wed, 30 Mar 2022 14:08:26 +0200 Subject: [PATCH] Seperated the lineChart into a separate class --- .../java/com/application/DB/Constants.java | 4 +- .../GUI/{Input.java => InputPopUpWindow.java} | 6 +-- .../GUI/LineChartFunctionality.java | 43 ++++++++++++++++++ src/main/java/com/application/Main.java | 28 ++++-------- .../com/application/DB/Constants.class | Bin 1677 -> 1678 bytes .../classes/com/application/GUI/Input.class | Bin 4488 -> 0 bytes .../com/application/Main$1WorkerThread.class | Bin 2263 -> 2263 bytes target/classes/com/application/Main.class | Bin 8949 -> 7007 bytes 8 files changed, 58 insertions(+), 23 deletions(-) rename src/main/java/com/application/GUI/{Input.java => InputPopUpWindow.java} (94%) create mode 100644 src/main/java/com/application/GUI/LineChartFunctionality.java delete mode 100644 target/classes/com/application/GUI/Input.class diff --git a/src/main/java/com/application/DB/Constants.java b/src/main/java/com/application/DB/Constants.java index da40820..84b9a5e 100644 --- a/src/main/java/com/application/DB/Constants.java +++ b/src/main/java/com/application/DB/Constants.java @@ -71,8 +71,8 @@ public final class Constants { public static final String START_DRYING_NAME = "DryingStarted"; public static final String STOP_DRYING_NAME = "DryingCompleted"; public static final String KILIN_NAME = "KilinId"; - public static int KILIN_ID = 18; - //public static int KILIN_ID = 18554; + //public static int KILIN_ID = 18; + public static int KILIN_ID = 18554; // Swappconsensordata public static final String KWH_NAME = "RealValue"; diff --git a/src/main/java/com/application/GUI/Input.java b/src/main/java/com/application/GUI/InputPopUpWindow.java similarity index 94% rename from src/main/java/com/application/GUI/Input.java rename to src/main/java/com/application/GUI/InputPopUpWindow.java index d94d71d..71bfe58 100644 --- a/src/main/java/com/application/GUI/Input.java +++ b/src/main/java/com/application/GUI/InputPopUpWindow.java @@ -15,7 +15,7 @@ import com.application.Main; * @author Eilert Tunheim, Karin Pettersen, Mads Arnesen * @version 1.0 */ -public class Input { +public class InputPopUpWindow { public static void display() { @@ -79,7 +79,7 @@ public class Input { // Call på getKwh() try { - Main.createLineChart(); + //Main.createLineChart(); } catch (Exception ex) { ex.printStackTrace(); } @@ -92,7 +92,7 @@ public class Input { layout.setAlignment(Pos.CENTER); Scene scene = new Scene(layout, 600, 600); - scene.getStylesheets().add(Input.class.getResource("/com.application/CSS/styleSheet.css").toExternalForm()); + scene.getStylesheets().add(InputPopUpWindow.class.getResource("/com.application/CSS/styleSheet.css").toExternalForm()); window.setScene(scene); window.showAndWait(); } diff --git a/src/main/java/com/application/GUI/LineChartFunctionality.java b/src/main/java/com/application/GUI/LineChartFunctionality.java new file mode 100644 index 0000000..a928239 --- /dev/null +++ b/src/main/java/com/application/GUI/LineChartFunctionality.java @@ -0,0 +1,43 @@ +package com.application.GUI; + +import javafx.scene.chart.CategoryAxis; +import javafx.scene.chart.LineChart; +import javafx.scene.chart.NumberAxis; +import javafx.scene.chart.XYChart; + +public class LineChartFunctionality { + + LineChart<String, Number> lineChart; + XYChart.Series<String, Number> series; + CategoryAxis xAxis; + NumberAxis yAxis; + + + public LineChartFunctionality(){ + xAxis = new CategoryAxis(); + yAxis = new NumberAxis(); + series = new XYChart.Series<String, Number>(); + lineChart = new LineChart<>(xAxis,yAxis); + lineChart.getData().add(series); + xAxis.setLabel("Date"); + yAxis.setLabel("Kwh"); + lineChart.setTitle("Drying Processes"); + } + + public LineChart<String, Number> getLineChart() { + return lineChart; + } + + public void setLineChart(LineChart<String, Number> lineChart) { + this.lineChart = lineChart; + } + + public XYChart.Series<String, Number> getSeries() { + return series; + } + + public void setSeries(XYChart.Series<String, Number> series) { + this.series = series; + } + +} diff --git a/src/main/java/com/application/Main.java b/src/main/java/com/application/Main.java index 2f19a21..39fa1a0 100644 --- a/src/main/java/com/application/Main.java +++ b/src/main/java/com/application/Main.java @@ -1,8 +1,8 @@ package com.application; -import com.application.DB.DB; -import com.application.GUI.Input; +import com.application.GUI.InputPopUpWindow; import com.application.GUI.RingProgressIndicator; +import com.application.GUI.LineChartFunctionality; import javafx.application.Application; import javafx.application.Platform; @@ -13,14 +13,10 @@ import javafx.scene.image.ImageView; import javafx.scene.layout.*; import javafx.scene.Scene; import javafx.stage.Stage; -import javafx.scene.chart.CategoryAxis; -import javafx.scene.chart.NumberAxis; -import javafx.scene.chart.XYChart; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; -import java.util.*; import java.util.logging.Logger; import static java.util.logging.Level.SEVERE; @@ -37,6 +33,7 @@ public class Main extends Application { private HBox logoBar; private VBox sideBar; private MenuBar menuBar; + private LineChartFunctionality lineChartFunctionality; /** * Starts the application @@ -62,6 +59,7 @@ public class Main extends Application { this.logoBar = new HBox(); this.sideBar = new VBox(); this.menuBar = new MenuBar(); + this.lineChartFunctionality = new LineChartFunctionality(); } /** @@ -78,7 +76,8 @@ public class Main extends Application { this.menuBar = createMenuBar(); this.sideBar = createSideBar(); this.logoBar = createLogoBar(); - LineChart<String, Number> lineChart = createLineChart(); + + LineChart<String, Number> lineChart = this.lineChartFunctionality.getLineChart(); //Set id's to connect to css stylesheet root.setId("root"); @@ -174,7 +173,7 @@ public class Main extends Application { Button finish = new Button("Finish"); finish.setId("sideBarButtonFinish"); - finish.setOnAction(e -> Input.display()); + finish.setOnAction(e -> InputPopUpWindow.display()); // Creating the circular progressbar @@ -261,16 +260,9 @@ public class Main extends Application { } - public static LineChart<String,Number> createLineChart() throws Exception { - - final CategoryAxis xAxis = new CategoryAxis(); - final NumberAxis yAxis = new NumberAxis(); - xAxis.setLabel("Date"); - - final LineChart<String, Number> lineChart = new LineChart<>(xAxis, yAxis); - lineChart.setTitle("Drying Processes"); + /* Map<Integer, Map> kWh = DB.getKwh(); @@ -293,13 +285,13 @@ public class Main extends Application { lineChart.getData().add(series); //System.out.println("\n\nNew line\n\n"); } + + */ /* for (Map.Entry<Integer, Map> entryKwh : kWh.entrySet()) { System.out.printf("Index: \t%s\t\t\tkWh: \t%s\n",entryKwh.getKey(),entryKwh.getValue()); } */ - return lineChart; - } } diff --git a/target/classes/com/application/DB/Constants.class b/target/classes/com/application/DB/Constants.class index 7cf43aea48c35042683a053b5794db086fc0ec92..3cffa8e8d8a94a99337892ff984d856f80e48a45 100644 GIT binary patch delta 41 ucmeC>?c?1b&BmF*z{CIoCX-dzbeRP`swM}s>2rHCFf!OPFfcGNH~;{gy9QwZ delta 40 tcmeC<?d9Dd&BmF|z{CIo#*<apbeRN%CWo-;b9*r`GT1XPFfcJV004}@1+4%8 diff --git a/target/classes/com/application/GUI/Input.class b/target/classes/com/application/GUI/Input.class deleted file mode 100644 index 90cc636ac48decad559bbc5e830e886dd9fdcb9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4488 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 W8D23+GPFTUiFO8Nh7N{KhAsfFZ`?uv diff --git a/target/classes/com/application/Main$1WorkerThread.class b/target/classes/com/application/Main$1WorkerThread.class index fc1cb79295b938a5ba6bc65d216611f6e1d0be64..ecdd8db78db05984f51b2e5159c022801f31209d 100644 GIT binary patch delta 89 zcmcaEcwKOVAv^CL22O@u415fG8H5@3O}1lSX?mD}jo}yrC&Lj2E{3BFd<-WUL>SI8 vh%=mGkYG5?Aj5EmL66}agE_+m21kaA3|<VE7<?J7PL|=wVmvpwog)AMBOe#r delta 89 zcmcaEcwKOVAv^D022O_E415gx7=#)2Pqt%UX?lc#jo~;0C&N(&E{0<ad<>@;L>SI7 vh%=mKkYG5&Aj5E$L66})gE_-R21kZV3|<VE8GIS8O_t%vVmv>&og)AMCRP{j diff --git a/target/classes/com/application/Main.class b/target/classes/com/application/Main.class index 80979f33ddbb4b67750a37f6c45e96cd1f729d8e..ba9aec1158e5eb2b28ba0a08e90d814dcfda0e05 100644 GIT binary patch delta 3121 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 SxgdoTBR2yxBM&1lBOd^Gkd)2< delta 4990 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 -- GitLab