aboutsummaryrefslogtreecommitdiff
path: root/Week15 Mandelbrot/src/com/camilstaps/mandelbrot/Textfields.java
diff options
context:
space:
mode:
authorCamil Staps2015-06-05 14:22:12 +0200
committerCamil Staps2015-06-05 14:22:12 +0200
commit6928ed87c0a9fa7f746c4331d0a1079d15f09051 (patch)
treeaff3df7dbb53a2ffb3382d36334fcff993947415 /Week15 Mandelbrot/src/com/camilstaps/mandelbrot/Textfields.java
parentMerge branch 'master' of github:camilstaps/OO1415 (diff)
Everything works except for multiple swingworkers
Diffstat (limited to 'Week15 Mandelbrot/src/com/camilstaps/mandelbrot/Textfields.java')
-rw-r--r--Week15 Mandelbrot/src/com/camilstaps/mandelbrot/Textfields.java127
1 files changed, 127 insertions, 0 deletions
diff --git a/Week15 Mandelbrot/src/com/camilstaps/mandelbrot/Textfields.java b/Week15 Mandelbrot/src/com/camilstaps/mandelbrot/Textfields.java
new file mode 100644
index 0000000..78098d1
--- /dev/null
+++ b/Week15 Mandelbrot/src/com/camilstaps/mandelbrot/Textfields.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2015 Camil Staps
+ */
+package com.camilstaps.mandelbrot;
+
+import java.awt.BorderLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Observable;
+import java.util.Observer;
+import javax.swing.JButton;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+
+/**
+ *
+ * @author camilstaps
+ */
+public class Textfields extends JPanel implements Observer {
+
+ private final FractalModel fractalModel;
+
+ private final String INITIAL_CENTER_X = "0",
+ INITIAL_CENTER_Y = "0",
+ INITIAL_SCALE = "0.5",
+ INITIAL_REPETITIONS = "100";
+
+ private final JTextField field_centerX = new JTextField(INITIAL_CENTER_X, 6);
+ private final JTextField field_centerY = new JTextField(INITIAL_CENTER_Y, 6);
+ private final JTextField field_scale = new JTextField(INITIAL_SCALE, 6);
+ private final JTextField field_repetitions = new JTextField(INITIAL_REPETITIONS, 6);
+ private final JButton button_redraw = new JButton("Redraw");
+ private final JButton button_reset = new JButton("Reset");
+
+ public Textfields(FractalModel fractalModel) {
+ super(new BorderLayout());
+
+ this.fractalModel = fractalModel;
+ fractalModel.addObserver(this);
+
+ setupControls();
+ }
+
+ private void setupControls() {
+ JPanel panel = new JPanel(new GridLayout(10,1));
+
+ panel.add(new JLabel("Center x:"));
+ panel.add(field_centerX);
+
+ panel.add(new JLabel("Center y:"));
+ panel.add(field_centerY);
+
+ panel.add(new JLabel("Scale:"));
+ panel.add(field_scale);
+
+ panel.add(new JLabel("Repetitions:"));
+ panel.add(field_repetitions);
+
+ button_redraw.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ if (ae.getActionCommand().equals("Redraw")) {
+ fractalModel.setBorders(getStartX(), getEndX(), getStartY(), getEndY());
+ }
+ }
+ });
+ panel.add(button_redraw);
+
+ button_reset.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent ae) {
+ field_centerX.setText(INITIAL_CENTER_X);
+ field_centerY.setText(INITIAL_CENTER_Y);
+ field_scale.setText(INITIAL_SCALE);
+ field_repetitions.setText(INITIAL_REPETITIONS);
+
+ button_redraw.doClick();
+ }
+ });
+ panel.add(button_reset);
+
+ add(panel, BorderLayout.NORTH);
+ add(new JPanel(), BorderLayout.CENTER);
+ }
+
+ @Override
+ public int getWidth() {
+ return 100;
+ }
+
+ protected double getStartX() {
+ double width = 1 / Double.parseDouble(field_scale.getText());
+ double center = Double.parseDouble(field_centerX.getText());
+ return center - width / 2;
+ }
+
+ protected double getEndX() {
+ double width = 1 / Double.parseDouble(field_scale.getText());
+ double center = Double.parseDouble(field_centerX.getText());
+ return center + width / 2;
+ }
+
+ protected double getStartY() {
+ double height = 1 / Double.parseDouble(field_scale.getText());
+ double center = Double.parseDouble(field_centerY.getText());
+ return center - height / 2;
+ }
+
+ protected double getEndY() {
+ double height = 1 / Double.parseDouble(field_scale.getText());
+ double center = Double.parseDouble(field_centerY.getText());
+ return center + height / 2;
+ }
+
+ @Override
+ public void update(Observable o, Object o1) {
+ field_centerX.setText(Float.toString((float)
+ ((fractalModel.getEndX() - fractalModel.getStartX()) / 2 + fractalModel.getStartX())));
+ field_centerY.setText(Float.toString((float)
+ ((fractalModel.getEndY() - fractalModel.getStartY()) / 2 + fractalModel.getStartY())));
+ field_scale.setText(Float.toString((float)
+ (1 / (fractalModel.getEndX() - fractalModel.getStartX()))));
+ }
+
+}