1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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()))));
}
}
|