From 221b1b8f03387ad717dd45e780f5b0246bccf5de Mon Sep 17 00:00:00 2001
From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com>
Date: Thu, 17 Mar 2022 20:59:16 +0100
Subject: [PATCH 2/8] =?UTF-8?q?Dateien=20Aus=20Workshop=20=C3=BCbernommen.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/FXML-WordCloud/build.gradle | 2 +-
.../java/ch/zhaw/prog2/application/App.java | 12 +++++
.../ch/zhaw/prog2/application/MainWindow.java | 37 +++++++++++++++
.../application/MainWindowController.java | 46 +++++++++++++++++++
.../ch/zhaw/prog2/application/MainWindow.fxml | 31 +++++++++++++
.../zhaw/prog2/fxmlcalculator/MainWindow.fxml | 8 ----
6 files changed, 127 insertions(+), 9 deletions(-)
create mode 100644 code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/App.java
create mode 100644 code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindow.java
create mode 100644 code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindowController.java
create mode 100644 code/FXML-WordCloud/src/main/resources/ch/zhaw/prog2/application/MainWindow.fxml
delete mode 100644 code/FXML-WordCloud/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml
diff --git a/code/FXML-WordCloud/build.gradle b/code/FXML-WordCloud/build.gradle
index 466e4a3..aa41707 100644
--- a/code/FXML-WordCloud/build.gradle
+++ b/code/FXML-WordCloud/build.gradle
@@ -28,7 +28,7 @@ dependencies {
// Configuration for Application plugin
application {
// Define the main class for the application.
- mainClass = 'ch.zhaw.prog2.application.WordModel'
+ mainClass = 'ch.zhaw.prog2.application.App'
}
// Configuration for JavaFX plugin
diff --git a/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/App.java b/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/App.java
new file mode 100644
index 0000000..b4da2c0
--- /dev/null
+++ b/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/App.java
@@ -0,0 +1,12 @@
+/*
+ * This Java source file was generated by the Gradle 'init' task.
+ */
+package ch.zhaw.prog2.application;
+
+import javafx.application.Application;
+
+public class App {
+ public static void main(String[] args) {
+ Application.launch(MainWindow.class, args);
+ }
+}
diff --git a/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindow.java b/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindow.java
new file mode 100644
index 0000000..0a6f0af
--- /dev/null
+++ b/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindow.java
@@ -0,0 +1,37 @@
+package ch.zhaw.prog2.application;
+
+import javafx.application.Application;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.scene.layout.Pane;
+import javafx.stage.Stage;
+
+public class MainWindow extends Application {
+
+
+
+ @Override
+ public void start(Stage primaryStage) throws Exception {
+ openMainWindow(primaryStage);
+ }
+
+ private void openMainWindow(Stage stage) {
+ try {
+ FXMLLoader loader = new FXMLLoader(getClass().getResource("MainWindow.fxml"));
+
+ Pane rootNode = loader.load();
+
+ MainWindowController mainWindowController = loader.getController();
+ //mainWindowController.connectProperties(); //nicht benötigt, da in der Methode MainWindowController in initialize aufgerufen wird.
+
+
+ Scene scene = new Scene(rootNode);
+
+ stage.setScene(scene);
+ stage.show();
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+}
diff --git a/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindowController.java b/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindowController.java
new file mode 100644
index 0000000..3de2324
--- /dev/null
+++ b/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindowController.java
@@ -0,0 +1,46 @@
+package ch.zhaw.prog2.application;
+
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.scene.control.Label;
+import javafx.scene.control.TextArea;
+import javafx.scene.control.TextField;
+
+public class MainWindowController {
+
+
+
+ public void initialize(){
+ connectProperties();
+ }
+
+ @FXML
+ private Label labelTitel;
+
+ @FXML
+ private TextField textEingabe;
+
+ @FXML
+ private TextArea textHistory;
+
+ @FXML
+ void hinzufuegenText(ActionEvent event) {
+ String text = textHistory.getText();
+ text += textEingabe.getText() + "\n";
+ textHistory.setText(text);
+ textEingabe.clear();
+ }
+
+ @FXML
+ void leerenTextEingabe(ActionEvent event) {
+ textEingabe.clear();
+ }
+
+
+
+ void connectProperties() {
+ // erste Möglichkeit
+ labelTitel.textProperty().bind(textEingabe.textProperty());
+ }
+
+}
diff --git a/code/FXML-WordCloud/src/main/resources/ch/zhaw/prog2/application/MainWindow.fxml b/code/FXML-WordCloud/src/main/resources/ch/zhaw/prog2/application/MainWindow.fxml
new file mode 100644
index 0000000..ca09c79
--- /dev/null
+++ b/code/FXML-WordCloud/src/main/resources/ch/zhaw/prog2/application/MainWindow.fxml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/FXML-WordCloud/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml b/code/FXML-WordCloud/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml
deleted file mode 100644
index 5599e8b..0000000
--- a/code/FXML-WordCloud/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
From 0488d50f7942d720f6ca0a137aaa93f90e81957d Mon Sep 17 00:00:00 2001
From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com>
Date: Thu, 17 Mar 2022 21:25:07 +0100
Subject: [PATCH 3/8] =?UTF-8?q?Aufgabe=201=20ausgef=C3=BChrt.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../ch/zhaw/prog2/application/MainWindow.java | 4 ++--
.../application/MainWindowController.java | 23 ++++++++++++++-----
2 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindow.java b/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindow.java
index 0a6f0af..4a8b933 100644
--- a/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindow.java
+++ b/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindow.java
@@ -8,7 +8,7 @@ import javafx.stage.Stage;
public class MainWindow extends Application {
-
+ WordModel wordModel = new WordModel();
@Override
public void start(Stage primaryStage) throws Exception {
@@ -23,7 +23,7 @@ public class MainWindow extends Application {
MainWindowController mainWindowController = loader.getController();
//mainWindowController.connectProperties(); //nicht benötigt, da in der Methode MainWindowController in initialize aufgerufen wird.
-
+ mainWindowController.setWordModel(wordModel);
Scene scene = new Scene(rootNode);
diff --git a/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindowController.java b/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindowController.java
index 3de2324..de98d5a 100644
--- a/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindowController.java
+++ b/code/FXML-WordCloud/src/main/java/ch/zhaw/prog2/application/MainWindowController.java
@@ -6,9 +6,12 @@ import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
+import java.util.Locale;
+
public class MainWindowController {
+ WordModelDecorator wordModelDecorator;
public void initialize(){
connectProperties();
@@ -25,18 +28,26 @@ public class MainWindowController {
@FXML
void hinzufuegenText(ActionEvent event) {
- String text = textHistory.getText();
- text += textEingabe.getText() + "\n";
- textHistory.setText(text);
- textEingabe.clear();
- }
+ String[] text = textEingabe.getText().toLowerCase().split(" ");
+ for(String word : text) {
+ wordModelDecorator.addWord(word);
+ }
+ }
@FXML
void leerenTextEingabe(ActionEvent event) {
textEingabe.clear();
}
-
+ void setWordModel(WordModel wordModel){
+ wordModelDecorator = new WordModelDecorator(wordModel);
+ wordModelDecorator.addListener(new IsObserver() {
+ @Override
+ public void update() {
+ textHistory.setText(wordModel.toString());
+ }
+ });
+ }
void connectProperties() {
// erste Möglichkeit
From 70dcb3fc719343896b6a762083fbb00ee070f7da Mon Sep 17 00:00:00 2001
From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com>
Date: Tue, 29 Mar 2022 20:56:05 +0200
Subject: [PATCH 4/8] =?UTF-8?q?Aufgabe=202+3=20ausgef=C3=BChrt.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/Calculator/build.gradle | 8 +
.../java/ch/zhaw/prog2/calculator/Main.java | 160 +++++++++++++++++-
2 files changed, 162 insertions(+), 6 deletions(-)
diff --git a/code/Calculator/build.gradle b/code/Calculator/build.gradle
index 444bae7..a77ac09 100644
--- a/code/Calculator/build.gradle
+++ b/code/Calculator/build.gradle
@@ -6,6 +6,14 @@ plugins {
id 'java'
// Apply the application plugin to add support for building a CLI application.
id 'application'
+ // Adding JavaFX support and dependencies
+ id 'org.openjfx.javafxplugin' version '0.0.12'
+}
+
+// Configuration for JavaFX plugin
+javafx {
+ version = '17'
+ modules = [ 'javafx.controls', 'javafx.fxml' ]
}
// Project/Module information
diff --git a/code/Calculator/src/main/java/ch/zhaw/prog2/calculator/Main.java b/code/Calculator/src/main/java/ch/zhaw/prog2/calculator/Main.java
index a37942e..abaee0d 100644
--- a/code/Calculator/src/main/java/ch/zhaw/prog2/calculator/Main.java
+++ b/code/Calculator/src/main/java/ch/zhaw/prog2/calculator/Main.java
@@ -3,8 +3,6 @@ package ch.zhaw.prog2.calculator;
import javafx.application.Application;
import javafx.application.Platform;
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
@@ -17,8 +15,28 @@ import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Main extends Application {
-
+ private static int VERTICAL_GAP = 5;
+ private static int HORIZONTAL_GAP = 10;
private Stage primaryStage;
+ private CheckMenuItem clearInitialAmount = new CheckMenuItem("Initial amount");
+ private CheckMenuItem clearReturnInPercent = new CheckMenuItem("Return in %");
+ private CheckMenuItem clearAnnualCosts = new CheckMenuItem("Annual Costs");
+ private CheckMenuItem clearNumberOfYears = new CheckMenuItem("Number of years");
+ private TextField initialAmount = new TextField();
+ private TextField returnInPercent = new TextField();
+ private TextField annualCost = new TextField();
+ private TextField numberOfYears = new TextField();
+ private TextArea results = new TextArea();
+
+ private static final String INFO = """
+ Enter valid values to
+ - Initial amount (> 0)
+ - Return in % (can be +/- or 0)
+ - Annual Costs (> 0)
+ - Number of years (> 0)
+ Calculate displays the annual balance development!";
+ """;
+
public static void main(String[] args) {
launch(args);
@@ -37,10 +55,14 @@ public class Main extends Application {
private void mainWindow() {
try {
BorderPane rootPane = new BorderPane();
- //BorderPane top
- MenuBar menuBar = new MenuBar();
+ createMenu(rootPane);
- // Create scene with root node with size
+
+ createInputOutputPanel(rootPane);
+
+ createButtons(rootPane);
+
+ // Create scene with root node with size
Scene scene = new Scene(rootPane, 600, 400);
// scene.getStylesheets().add(getClass().getResource("MyLabel.css").toExternalForm());
primaryStage.setMinWidth(280);
@@ -55,6 +77,132 @@ public class Main extends Application {
}
}
+ private void createButtons(BorderPane rootPane) {
+ HBox buttons = new HBox(HORIZONTAL_GAP);
+ buttons.setAlignment(Pos.BASELINE_CENTER);
+
+ Button closeButton = new Button("Close");
+ Button calculateButton = new Button("Calculate");
+ closeButton.setOnAction(e -> Platform.exit());
+ calculateButton.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent event) {
+ ValueHandler valueHandler = new ValueHandler();
+ valueHandler.checkValuesAndCalculateResult(initialAmount.getText(), returnInPercent.getText(), annualCost.getText(), numberOfYears.getText());
+ String result = valueHandler.getResultBound();
+ if(valueHandler.areValuesOk()){
+ showResult(result, true, Color.GREEN);
+ } else {
+ showResult(result, false, Color.RED);
+ }
+ }
+ });
+
+ buttons.getChildren().addAll(calculateButton, closeButton);
+ buttons.setPadding(new Insets(VERTICAL_GAP, HORIZONTAL_GAP, VERTICAL_GAP, HORIZONTAL_GAP));
+ rootPane.setBottom(buttons);
+ }
+
+ private void createInputOutputPanel(BorderPane rootPane) {
+ VBox inputOutputPanel = new VBox(VERTICAL_GAP);
+ GridPane inputPanel = new GridPane();
+ VBox resultRows = new VBox();
+ inputOutputPanel.getChildren().add(inputPanel);
+ inputOutputPanel.getChildren().add(resultRows);
+
+ createInputPanel(inputPanel);
+
+ resultRows.getChildren().add(new Label("Results:"));
+ resultRows.getChildren().add(results);
+ resultRows.setPadding(new Insets(VERTICAL_GAP, HORIZONTAL_GAP, VERTICAL_GAP, HORIZONTAL_GAP));
+
+ rootPane.setCenter(inputOutputPanel);
+ }
+
+ private void createInputPanel(GridPane inputPanel) {
+ inputPanel.setVgap(5);
+ inputPanel.setHgap(5);
+ inputPanel.add(new Label("Initial amount"), 0, 1);
+ inputPanel.add(new Label("Return rate in %"), 0, 2);
+ inputPanel.add(new Label("Annual cost"), 0, 3);
+ inputPanel.add(new Label("Number of years"), 0, 4);
+ inputPanel.add(initialAmount, 1, 1);
+ inputPanel.add(returnInPercent, 1, 2);
+ inputPanel.add(annualCost, 1, 3);
+ inputPanel.add(numberOfYears, 1, 4);
+ inputPanel.setPadding(new Insets(VERTICAL_GAP, HORIZONTAL_GAP, VERTICAL_GAP, HORIZONTAL_GAP));
+ }
+
+ private void createMenu(BorderPane rootPane) {
+ //BorderPane top
+ MenuBar menuBar = new MenuBar();
+
+ Menu clearMenu = new Menu("Clear");
+ Menu helpMenu = new Menu("?");
+
+ // Create MenuItems
+ MenuItem clearValues = new MenuItem("Clear values");
+ clearValues.setId("clearValues");
+ MenuItem clearResults = new MenuItem("Clear results");
+ clearResults.setId("clearResults");
+ MenuItem helpShowText = new MenuItem("Show help");
+
+ clearMenu.getItems().addAll(clearInitialAmount, clearReturnInPercent, clearAnnualCosts, clearNumberOfYears);
+ clearMenu.getItems().addAll(new SeparatorMenuItem(), clearValues, new SeparatorMenuItem(), clearResults);
+ helpMenu.getItems().add(helpShowText);
+
+ menuBar.getMenus().addAll(clearMenu, helpMenu);
+ //using an inner class
+ ClearHandler clearHandler = new ClearHandler();
+ clearValues.addEventHandler(ActionEvent.ACTION, clearHandler);
+ clearResults.addEventHandler(ActionEvent.ACTION, clearHandler);
+
+ helpShowText.setAccelerator(KeyCombination.keyCombination("F1"));
+ helpShowText.setOnAction(new EventHandler() {
+ @Override
+ public void handle(ActionEvent event) {
+ showResult(INFO, true, Color.BLUE);
+ }
+ });
+ rootPane.setTop(menuBar);
+ }
+
+ /*
+ * Handler to clear the controls
+ */
+ private class ClearHandler implements EventHandler {
+
+ @Override
+ public void handle(ActionEvent event) {
+ switch (((MenuItem) event.getSource()).getId()) {
+ case "clearValues" -> {
+ if (clearInitialAmount.isSelected()) {
+ initialAmount.clear();
+ }
+ if (clearAnnualCosts.isSelected()) {
+ annualCost.clear();
+ }
+ if (clearNumberOfYears.isSelected()) {
+ numberOfYears.clear();
+ }
+ if (clearReturnInPercent.isSelected()) {
+ returnInPercent.clear();
+ }
+ }
+ case "clearResults" -> results.clear();
+ }
+ }
+ }
+
+ private void showResult(String text, boolean clearFirst, Color backColor){
+ if(clearFirst) {
+ results.setText(text);
+ }else{
+ results.appendText("\n" + text);
+ }
+ results.setBorder(new Border(new BorderStroke(backColor, BorderStrokeStyle.SOLID, CornerRadii.EMPTY, new BorderWidths(1))));
+ }
+
}
From f0995fbf27de630619849e1b0aac4fd5069aa9f3 Mon Sep 17 00:00:00 2001
From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com>
Date: Tue, 29 Mar 2022 22:07:37 +0200
Subject: [PATCH 5/8] Aufgabe 4 MainWindow.fxml erstellt.
---
code/FXML-Calculator/build.gradle | 2 +-
.../ch/zhaw/prog2/fxmlcalculator/Main.java | 23 +++-
.../fxmlcalculator/MainWindowController.java | 39 ++++++-
.../zhaw/prog2/fxmlcalculator/MainWindow.fxml | 108 +++++++++++++++++-
4 files changed, 164 insertions(+), 8 deletions(-)
diff --git a/code/FXML-Calculator/build.gradle b/code/FXML-Calculator/build.gradle
index 9801fef..c474171 100644
--- a/code/FXML-Calculator/build.gradle
+++ b/code/FXML-Calculator/build.gradle
@@ -34,7 +34,7 @@ application {
// Configuration for JavaFX plugin
javafx {
version = '17'
- modules = [ 'javafx.controls' ]
+ modules = [ 'javafx.controls', 'javafx.fxml' ]
}
// Java plugin configuration
diff --git a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/Main.java b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/Main.java
index 19e0863..f227554 100644
--- a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/Main.java
+++ b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/Main.java
@@ -7,7 +7,7 @@ import javafx.scene.layout.Pane;
import javafx.stage.Stage;
/**
* Main-Application. Opens the first window (MainWindow) and the common ValueHandler
- * @author
+ * @author
* @version 1.0
*/
public class Main extends Application {
@@ -26,7 +26,28 @@ public class Main extends Application {
private void mainWindow(Stage primaryStage) {
//load main window
+ try {
+ FXMLLoader loader = new FXMLLoader(getClass().getResource("MainWindow.fxml"));
+
+ Pane rootNode = loader.load();
+
+ MainWindowController mainWindowController = loader.getController();
+
+
+ Scene scene = new Scene(rootNode);
+
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
}
+
+
+
+
+
+
}
diff --git a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/MainWindowController.java b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/MainWindowController.java
index dff952f..1ad19ac 100644
--- a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/MainWindowController.java
+++ b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/MainWindowController.java
@@ -8,6 +8,8 @@ import javafx.scene.control.TextField;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
/**
* Controller for the MainWindow. One controller per mask (or FXML file)
@@ -17,6 +19,41 @@ import javafx.stage.Stage;
* @version 1.0
*/
public class MainWindowController {
- // please complete
+ @FXML
+ private TextField annualCost;
+
+ @FXML
+ private CheckMenuItem clearAnnualCosts;
+
+ @FXML
+ private CheckMenuItem clearInitialAmount;
+
+ @FXML
+ private CheckMenuItem clearNumberOfYears;
+
+ @FXML
+ private CheckMenuItem clearReturnInPercent;
+
+ @FXML
+ private TextField initialAmount;
+
+ @FXML
+ private TextField numberOfYears;
+
+ @FXML
+ private TextArea results;
+
+ @FXML
+ private TextField returnInPercent;
+
+ @FXML
+ void calculate(ActionEvent event) {
+
+ }
+
+ @FXML
+ void close(ActionEvent event) {
+
+ }
}
diff --git a/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml b/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml
index 5599e8b..2b2c4fa 100644
--- a/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml
+++ b/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml
@@ -1,8 +1,106 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From dce338703243c78d7815f0ced96233ce8bc58551 Mon Sep 17 00:00:00 2001
From: romanschenk37 <84532681+romanschenk37@users.noreply.github.com>
Date: Wed, 30 Mar 2022 11:17:18 +0200
Subject: [PATCH 6/8] =?UTF-8?q?Aufgabe=204=20ausgef=C3=BChrt.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../prog2/fxmlcalculator/IsObservable.java | 18 ++++
.../zhaw/prog2/fxmlcalculator/IsObserver.java | 13 +++
.../ch/zhaw/prog2/fxmlcalculator/Main.java | 29 ++++--
.../fxmlcalculator/MainWindowController.java | 90 ++++++++++++++++---
.../ResultWindowController.java | 18 +++-
.../fxmlcalculator/ValueHandlerDecorator.java | 60 +++++++++++++
.../zhaw/prog2/fxmlcalculator/MainWindow.fxml | 17 +++-
.../prog2/fxmlcalculator/ResultWindow.fxml | 10 +--
8 files changed, 226 insertions(+), 29 deletions(-)
create mode 100644 code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/IsObservable.java
create mode 100644 code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/IsObserver.java
create mode 100644 code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/ValueHandlerDecorator.java
diff --git a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/IsObservable.java b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/IsObservable.java
new file mode 100644
index 0000000..0e9243d
--- /dev/null
+++ b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/IsObservable.java
@@ -0,0 +1,18 @@
+package ch.zhaw.prog2.fxmlcalculator;
+/**
+ * Most basic interface for observing an object
+ * @author bles
+ *
+ */
+public interface IsObservable {
+ /**
+ * Add an observer that listens for updates
+ * @param observer
+ */
+ void addListener(IsObserver observer);
+ /**
+ * Remove an observer from the list
+ * @param observer
+ */
+ void removeListener(IsObserver observer);
+}
diff --git a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/IsObserver.java b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/IsObserver.java
new file mode 100644
index 0000000..2f6ded0
--- /dev/null
+++ b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/IsObserver.java
@@ -0,0 +1,13 @@
+package ch.zhaw.prog2.fxmlcalculator;
+/**
+ * Most basic interface for beeing an observer
+ * @author bles
+ *
+ */
+public interface IsObserver {
+ /**
+ * This method is always called when an observed object
+ * changes
+ */
+ void update();
+}
diff --git a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/Main.java b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/Main.java
index f227554..7fdb7ea 100644
--- a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/Main.java
+++ b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/Main.java
@@ -5,6 +5,9 @@ import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
+
+import java.io.IOException;
+
/**
* Main-Application. Opens the first window (MainWindow) and the common ValueHandler
* @author
@@ -14,10 +17,21 @@ public class Main extends Application {
private ValueHandler valueHandler;
+ private static final String INFO = """
+ Enter valid values to
+ - Initial amount (> 0)
+ - Return in % (can be +/- or 0)
+ - Annual Costs (> 0)
+ - Number of years (> 0)
+ Calculate displays the annual balance development!";
+ """;
+
public static void main(String[] args) {
launch(args);
}
+
+
@Override
public void start(Stage primaryStage) {
valueHandler = new ValueHandler();
@@ -27,16 +41,17 @@ public class Main extends Application {
private void mainWindow(Stage primaryStage) {
//load main window
try {
- FXMLLoader loader = new FXMLLoader(getClass().getResource("MainWindow.fxml"));
-
- Pane rootNode = loader.load();
-
- MainWindowController mainWindowController = loader.getController();
- Scene scene = new Scene(rootNode);
+ FXMLLoader mainWindowLoader = new FXMLLoader(getClass().getResource("MainWindow.fxml"));
+ Pane rootNode = mainWindowLoader.load();
- primaryStage.setScene(scene);
+ MainWindowController mainWindowController = mainWindowLoader.getController();
+ mainWindowController.setValueHandler(new ValueHandler());
+ mainWindowController.setHelpText(INFO);
+ Scene mainWindowScene = new Scene(rootNode);
+
+ primaryStage.setScene(mainWindowScene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
diff --git a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/MainWindowController.java b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/MainWindowController.java
index 1ad19ac..fd1a0d7 100644
--- a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/MainWindowController.java
+++ b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/MainWindowController.java
@@ -1,24 +1,27 @@
package ch.zhaw.prog2.fxmlcalculator;
-
+import javafx.application.Platform;
+import javafx.event.ActionEvent;
+import javafx.fxml.FXML;
+import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.CheckMenuItem;
+import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
-import javafx.event.ActionEvent;
-import javafx.fxml.FXML;
+import javafx.scene.Scene;
+
+import javax.xml.transform.Result;
+import java.io.IOException;
-/**
- * Controller for the MainWindow. One controller per mask (or FXML file)
- * Contains everything the controller has to reach in the view (controls)
- * and all methods the view calls based on events.
- * @author
- * @version 1.0
- */
public class MainWindowController {
+ ValueHandlerDecorator valueHandlerDecorator;
+ ValueHandler valueHandler;
+ String helpText;
+
@FXML
private TextField annualCost;
@@ -48,12 +51,79 @@ public class MainWindowController {
@FXML
void calculate(ActionEvent event) {
+ valueHandlerDecorator.checkValuesAndCalculateResult(initialAmount.getText(), returnInPercent.getText(), annualCost.getText(), numberOfYears.getText());
+ }
+ @FXML
+ void clearResults(ActionEvent event) {
+ valueHandlerDecorator.clearResult();
+ }
+
+
+ @FXML
+ void clearValues(ActionEvent event) {
+ if(clearAnnualCosts.isSelected()){
+ annualCost.clear();
+ }
+ if(clearReturnInPercent.isSelected()){
+ returnInPercent.clear();
+ }
+ if(clearNumberOfYears.isSelected()){
+ numberOfYears.clear();
+ }
+ if(clearInitialAmount.isSelected()){
+ initialAmount.clear();
+ }
}
@FXML
void close(ActionEvent event) {
+ Platform.exit();
+ }
+ @FXML
+ void openResultWindow(ActionEvent event) {
+
+ FXMLLoader resultWindowLoader = new FXMLLoader(getClass().getResource("ResultWindow.fxml"));
+ Pane resultNode = new StackPane();
+ try {
+ resultNode = resultWindowLoader.load();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ ResultWindowController resultWindowController = resultWindowLoader.getController();
+ resultWindowController.setValueHandler(valueHandler, valueHandlerDecorator);
+ Scene resultScene = new Scene(resultNode);
+
+ // New window (Stage)
+ Stage resultStage = new Stage();
+ resultStage.setTitle("Results");
+ resultStage.setScene(resultScene);
+
+ resultStage.show();
+
+ valueHandlerDecorator.informListener();
+ }
+
+
+ @FXML
+ void showHelp(ActionEvent event) {
+ valueHandlerDecorator.showHelp(helpText);
+ }
+
+ public void setValueHandler(ValueHandler valueHandler){
+ this.valueHandler = valueHandler;
+ valueHandlerDecorator = new ValueHandlerDecorator(valueHandler);
+ valueHandlerDecorator.addListener(new IsObserver() {
+ @Override
+ public void update() {
+ results.setText(valueHandler.getResultBound());
+ }
+ });
+ }
+
+ public void setHelpText(String helpText){
+ this.helpText = helpText;
}
}
diff --git a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/ResultWindowController.java b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/ResultWindowController.java
index 2077a37..bce37fd 100644
--- a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/ResultWindowController.java
+++ b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/ResultWindowController.java
@@ -1,5 +1,6 @@
package ch.zhaw.prog2.fxmlcalculator;
+import javafx.fxml.FXML;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;
@@ -11,15 +12,26 @@ import javafx.stage.Stage;
* @version 1.0
*/
public class ResultWindowController {
- // add datafields
+ ValueHandler valueHandler;
+ ValueHandlerDecorator valueHandlerDecorator;
- //@FXML
+ @FXML
private TextArea results;
- //@FXML
+ @FXML
private void closeWindow() {
Stage stage = (Stage) results.getScene().getWindow();
stage.close();
}
+ public void setValueHandler(ValueHandler valueHandler, ValueHandlerDecorator valueHandlerDecorator){
+ this.valueHandler = valueHandler;
+ valueHandlerDecorator.addListener(new IsObserver() {
+ @Override
+ public void update() {
+ results.setText(valueHandler.getResultBound());
+ }
+ });
+ }
+
}
diff --git a/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/ValueHandlerDecorator.java b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/ValueHandlerDecorator.java
new file mode 100644
index 0000000..fbdb152
--- /dev/null
+++ b/code/FXML-Calculator/src/main/java/ch/zhaw/prog2/fxmlcalculator/ValueHandlerDecorator.java
@@ -0,0 +1,60 @@
+package ch.zhaw.prog2.fxmlcalculator;
+
+import ch.zhaw.prog2.fxmlcalculator.IsObservable;
+import ch.zhaw.prog2.fxmlcalculator.IsObserver;
+import ch.zhaw.prog2.fxmlcalculator.ValueHandler;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.scene.layout.Pane;
+import javafx.scene.layout.StackPane;
+import javafx.stage.Stage;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * Adds observable functionality to one Value Handler.
+ * The decorator uses the original methods of the WordModel-object.
+ * @author bles
+ *
+ */
+public class ValueHandlerDecorator implements IsObservable {
+ private final ValueHandler valueHandler;
+ private List listener = new ArrayList<>();
+
+ public ValueHandlerDecorator(ValueHandler valueHandler) {
+ this.valueHandler = valueHandler;
+ }
+
+ @Override
+ public void addListener(IsObserver observer) {
+ listener.add(observer);
+ }
+
+ @Override
+ public void removeListener(IsObserver observer) {
+ listener.remove(observer);
+ }
+
+ public void checkValuesAndCalculateResult(String initialAmount, String returnInPercent, String annualCost, String numberOfYears) {
+ valueHandler.checkValuesAndCalculateResult(initialAmount, returnInPercent, annualCost, numberOfYears);
+ informListener();
+ }
+
+ public void showHelp(String text) {
+ valueHandler.setResultBound(text);
+ informListener();
+ }
+
+ public void clearResult(){
+ valueHandler.clearResult();
+ informListener();
+ }
+
+ public void informListener() {
+ for(IsObserver observer : listener) {
+ observer.update();
+ }
+ }
+
+}
diff --git a/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml b/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml
index 2b2c4fa..862e156 100644
--- a/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml
+++ b/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/MainWindow.fxml
@@ -10,6 +10,7 @@
+
@@ -17,7 +18,7 @@
-
+
@@ -28,14 +29,17 @@
-
+
-
+
@@ -97,6 +101,11 @@
+
diff --git a/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/ResultWindow.fxml b/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/ResultWindow.fxml
index 88b59f2..d67f9ce 100644
--- a/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/ResultWindow.fxml
+++ b/code/FXML-Calculator/src/main/resources/ch/zhaw/prog2/fxmlcalculator/ResultWindow.fxml
@@ -4,12 +4,12 @@
-
+
+
+
-
+
@@ -35,7 +35,7 @@
-