diff options
Diffstat (limited to 'Week15 Mandelbrot/src/com/camilstaps/mandelbrot/Textfields.java')
-rw-r--r-- | Week15 Mandelbrot/src/com/camilstaps/mandelbrot/Textfields.java | 127 |
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())))); + } + +} |