/* * 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())))); } }