diff --git a/src/main/java/org/example/chaosgame/MainApp.java b/src/main/java/org/example/chaosgame/MainApp.java index 4a05a6d855a537aba683723b0a5693603c00800d..20aa139361ea37500a14d55484af4cda2bd8e583 100644 --- a/src/main/java/org/example/chaosgame/MainApp.java +++ b/src/main/java/org/example/chaosgame/MainApp.java @@ -6,7 +6,10 @@ import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.stage.Stage; +import org.example.chaosgame.controller.MainController; +import org.example.chaosgame.model.chaos.ChaosGame; import org.example.chaosgame.model.chaos.ChaosGameDescription; +import org.example.chaosgame.model.chaos.ChaosGameDescriptionFactory; import org.example.chaosgame.model.chaos.ChaosGameFileHandler; import org.example.chaosgame.view.ChaosPage; import org.example.chaosgame.view.ExplorePage; @@ -34,7 +37,6 @@ public class MainApp extends Application { }); Button exploreButton = menuView.getExploreButton(); exploreButton.setOnAction(e-> { - borderPane.setCenter(explorePage.getExploreContent()); }); HBox menuBar = menuView.getMenuBar(); diff --git a/src/main/java/org/example/chaosgame/controller/ChaosGameSubject.java b/src/main/java/org/example/chaosgame/controller/ChaosGameSubject.java new file mode 100644 index 0000000000000000000000000000000000000000..36dd8621aa6f29fd57d63cb449a8be2e7b8af86d --- /dev/null +++ b/src/main/java/org/example/chaosgame/controller/ChaosGameSubject.java @@ -0,0 +1,7 @@ +package org.example.chaosgame.controller; + +public interface ChaosGameSubject { + void registerObserver(Observer observer); + void removeObserver(Observer observer); + void notifyObservers(); +} diff --git a/src/main/java/org/example/chaosgame/controller/MainController.java b/src/main/java/org/example/chaosgame/controller/MainController.java index d00c243c45f66ab1e88d79947d0059499769774b..fe97afa8003b8bfe103da46b29dd8e84e26a189d 100644 --- a/src/main/java/org/example/chaosgame/controller/MainController.java +++ b/src/main/java/org/example/chaosgame/controller/MainController.java @@ -1,5 +1,22 @@ package org.example.chaosgame.controller; -public class MainController { +import javafx.scene.layout.StackPane; +import org.example.chaosgame.model.chaos.ChaosGame; +import org.example.chaosgame.view.ChaosPage; +public class MainController implements Observer{ + private final ChaosGame chaosGame; + private final ChaosPage chaosPage; + + + public MainController(ChaosGame chaosGame) { + this.chaosGame = chaosGame; + this.chaosPage = new ChaosPage(); + chaosGame.registerObserver(this); + } + + @Override + public void update() { + chaosPage.updateCanvas(); + } } diff --git a/src/main/java/org/example/chaosgame/controller/Observer.java b/src/main/java/org/example/chaosgame/controller/Observer.java new file mode 100644 index 0000000000000000000000000000000000000000..584d01d8d130dfe74fb48653a98fd0bbc46fbde2 --- /dev/null +++ b/src/main/java/org/example/chaosgame/controller/Observer.java @@ -0,0 +1,5 @@ +package org.example.chaosgame.controller; + +public interface Observer { + void update(); +} diff --git a/src/main/java/org/example/chaosgame/model/chaos/ChaosGame.java b/src/main/java/org/example/chaosgame/model/chaos/ChaosGame.java index 82c47121c15103262cc710ae6ccabbf9e29de854..88ec0ecbffc6eadb086322dcbfb0d982502bc35e 100644 --- a/src/main/java/org/example/chaosgame/model/chaos/ChaosGame.java +++ b/src/main/java/org/example/chaosgame/model/chaos/ChaosGame.java @@ -1,7 +1,11 @@ package org.example.chaosgame.model.chaos; +import java.util.ArrayList; import java.util.List; import java.util.Random; + +import org.example.chaosgame.controller.ChaosGameSubject; +import org.example.chaosgame.controller.Observer; import org.example.chaosgame.model.linalg.Vector2D; /** @@ -13,14 +17,15 @@ import org.example.chaosgame.model.linalg.Vector2D; * The new point is then drawn on the canvas. * This process is repeated a selected amount of steps. */ -public class ChaosGame { +public class ChaosGame implements ChaosGameSubject { private final ChaosCanvas canvas; private final ChaosGameDescription description; private Vector2D currentPoint = new Vector2D(0.0, 0.0); - public final Random random = new Random(); + private final Random random = new Random(); + private List<Observer> observers; /** * Constructor for ChaosGame. @@ -36,6 +41,7 @@ public class ChaosGame { this.description = description; this.canvas = new ChaosCanvas(width, height, description.getMinCoords(), description.getMaxCoords()); + this.observers = new ArrayList<>(); } @@ -55,6 +61,7 @@ public class ChaosGame { } else { runStepsUniform(steps); } + notifyObservers(); } private void runStepsUniform(int steps) { for (int i = 0; i < steps; i++) { @@ -90,4 +97,25 @@ public class ChaosGame { canvas.putPixel(currentPoint); } } + + @Override + public void registerObserver(Observer observer) { + observers.add(observer); + System.out.println("Observer added"); + } + + @Override + public void removeObserver(Observer observer) { + observers.remove(observer); + System.out.println("Observer removed"); + } + + @Override + public void notifyObservers() { + for (Observer observer : observers) { + observer.update(); + System.out.println("Observer notified"); + } + } } + diff --git a/src/main/java/org/example/chaosgame/view/ChaosPage.java b/src/main/java/org/example/chaosgame/view/ChaosPage.java index 6e0192011514f60e9be48e0dfee90c03d3806d9c..658dfd3e14c814da3219d96fffa31a48f7127172 100644 --- a/src/main/java/org/example/chaosgame/view/ChaosPage.java +++ b/src/main/java/org/example/chaosgame/view/ChaosPage.java @@ -26,7 +26,6 @@ public class ChaosPage { private final Canvas canvas; private final GraphicsContext gc; private final Label errorLabel = new Label("Invalid input. Please enter a valid number."); - private final VBox runStepsBox = new VBox(); public ChaosPage() { @@ -42,16 +41,8 @@ public class ChaosPage { stepsField.setPromptText("Enter number of steps"); - ComboBox<String> contextMenu = new ComboBox<>(); contextMenu.setPromptText("Select chaos game"); - ColorAdjust shade = new ColorAdjust(); - shade.setBrightness(0.4); - contextMenu.addEventHandler(MouseEvent.MOUSE_ENTERED, - e -> contextMenu.setEffect(shade)); - contextMenu.addEventHandler(MouseEvent.MOUSE_EXITED, - e -> contextMenu.setEffect(null)); - contextMenu.getItems().addAll("Julia", "Sierpinski", "Barnsley", "Make your own");