-
Notifications
You must be signed in to change notification settings - Fork 0
/
CircleModel3.java
100 lines (84 loc) · 3.33 KB
/
CircleModel3.java
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
import javafx.beans.property.SimpleBooleanProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.collections.ObservableMap;
import javafx.scene.paint.Color;
public class CircleModel3 implements CircleEvents {
private SimpleIntegerProperty circleCounter;
private SimpleDoubleProperty radius = new SimpleDoubleProperty(RADIUS);
private SimpleBooleanProperty calculateArea= new SimpleBooleanProperty(false);
private SimpleBooleanProperty filled = new SimpleBooleanProperty(false);
private SimpleObjectProperty<Color> color = new SimpleObjectProperty<>(Color.BLACK);
private ObservableMap<eventType, ObservableList<MyListener>> circleHashMap = FXCollections.observableHashMap();
public CircleModel3(int circleCounter) {
this.circleCounter = new SimpleIntegerProperty(circleCounter);
for (eventType et : eventType.values())
circleHashMap.put(et, FXCollections.observableArrayList());
}
public int getcircleCounter() {
return circleCounter.get();
}
public void setcircleCounter(int circleCounter) {
this.circleCounter = new SimpleIntegerProperty(circleCounter);
}
public double getRadius() {
return radius.get();
}
public void setRadius(double radius) {
this.radius = new SimpleDoubleProperty(radius);
processEvent(eventType.RADIUS,new MyActionEvent(this, eventType.RADIUS.ordinal(), eventType.RADIUS.toString()));
}
public boolean isFilled() {
return filled.get();
}
public void setFilled(Boolean filled) {
this.filled = new SimpleBooleanProperty(filled);
processEvent(eventType.FILLED,new MyActionEvent(this, eventType.FILLED.ordinal(), eventType.FILLED.toString()));
}
public Color getColor() {
return color.get();
}
public void setColor(Color color) {
this.color = new SimpleObjectProperty<>(color);
processEvent(eventType.COLOR,new MyActionEvent(this, eventType.COLOR.ordinal(),eventType.COLOR.toString()));
}
public boolean calculateArea() {
return calculateArea.get();
}
public void setCalculateArea(Boolean calculateArea) {
this.calculateArea = new SimpleBooleanProperty(calculateArea);
processEvent(eventType.AREA, new MyActionEvent(this, eventType.AREA.ordinal(), eventType.AREA.toString()));
}
public synchronized void addListener(MyListener l, eventType et) {
ObservableList<MyListener> al;
al = circleHashMap.get(et);
if (al == null)
al = FXCollections.observableArrayList();
al.add(l);
circleHashMap.put(et, al);
}
public synchronized void removeActionListener(MyListener l, eventType et) {
ObservableList<MyListener> al;
al = circleHashMap.get(et);
if (al != null && al.contains(l))
al.remove(l);
circleHashMap.put(et, al);
}
private void processEvent(eventType et, MyActionEvent e) {
ObservableList<MyListener> al;
synchronized (this) {
al = circleHashMap.get(et);
if (al == null)
return;
}
System.out.println("model number: " + (getcircleCounter() + 1) + " actionCommand: " + e.getActionCommand()
+ " array size is: " + al.size());
for (int i = 0; i < al.size(); i++) {
MyListener listener = (MyListener) al.get(i);
listener.actionPerformed(e);
}
}
}