Skip to content

Commit 9185fbe

Browse files
committed
Removed duplication
1 parent cf6295f commit 9185fbe

4 files changed

Lines changed: 71 additions & 66 deletions

File tree

src/main/java/org/teachingextensions/WindowUtils/MultiTurtleWindow.java

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
package org.teachingextensions.WindowUtils;
22

3-
import org.teachingextensions.approvals.lite.util.ObjectUtils;
43
import org.teachingextensions.logo.Turtle;
5-
import org.teachingextensions.logo.Turtle.Animals;
64
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
75
import org.teachingextensions.logo.utils.InterfaceUtils.MultiTurtlePainter;
86
import org.teachingextensions.logo.utils.InterfaceUtils.MultiTurtleTrailPainter;
97
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
108

11-
import java.awt.*;
129
import java.util.ArrayList;
1310
import java.util.List;
1411

@@ -17,17 +14,10 @@
1714
*/
1815
public class MultiTurtleWindow extends TurtlePanel {
1916
private List<Turtle> turtles = new ArrayList<Turtle>();
20-
private Animals animal = Animals.Turtle;
21-
private Paintable multiTurtlePainter;
22-
private Paintable multiTurtleTrailPainter;
2317

2418
public MultiTurtleWindow() {
2519
super("Turtles, Turtles, Turtles!");
26-
this.image = loadAnimal();
27-
this.getWindow()
28-
.add(this.createTurtlePainter())
29-
.add(this.createTurtleTrailPainter())
30-
.setBackground(PenColors.Blues.DarkSlateBlue);
20+
this.getWindow().setBackground(PenColors.Blues.DarkSlateBlue);
3121
}
3222

3323
/**
@@ -46,23 +36,20 @@ public void addTurtle(Turtle turtle) {
4636
turtle.setPanel(this);
4737

4838
this.turtles.add(turtle);
49-
this.getWindow()
50-
.remove(this.multiTurtlePainter)
51-
.remove(this.multiTurtleTrailPainter)
52-
.add(this.createTurtlePainter())
53-
.add(this.createTurtleTrailPainter());
39+
clearPainters();
40+
configurePainters();
5441
}
5542

56-
private Image loadAnimal() {
57-
return ObjectUtils.loadImage(MultiTurtleWindow.class, this.animal + ".png");
43+
@Override
44+
protected Paintable createTurtleTrailPainter() {
45+
this.setTrailPainter(new MultiTurtleTrailPainter(this.turtles));
46+
return this.getTrailPainter();
5847
}
5948

60-
private Paintable createTurtleTrailPainter() {
61-
return this.multiTurtleTrailPainter = new MultiTurtleTrailPainter(this.turtles);
62-
}
63-
64-
private Paintable createTurtlePainter() {
65-
return this.multiTurtlePainter = new MultiTurtlePainter(this.turtles, this.getImage());
49+
@Override
50+
protected Paintable createTurtlePainter() {
51+
this.setTurtlePainter(new MultiTurtlePainter(this.turtles, this.getImage()));
52+
return this.getTurtlePainter();
6653
}
6754

6855
public int getTurtleCount() {

src/main/java/org/teachingextensions/WindowUtils/ProgramWindow.java

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
package org.teachingextensions.WindowUtils;
22

3-
import java.awt.Color;
4-
import java.awt.Dimension;
5-
import java.awt.Graphics;
6-
import java.awt.Graphics2D;
7-
import java.awt.RenderingHints;
8-
import java.util.ArrayList;
9-
10-
import javax.swing.JButton;
11-
import javax.swing.JFrame;
12-
import javax.swing.JPanel;
13-
143
import org.teachingextensions.approvals.lite.util.FrameCloser;
154
import org.teachingextensions.approvals.lite.util.WindowUtils;
165
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
@@ -22,6 +11,10 @@
2211
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
2312
import org.teachingextensions.virtualproctor.VirtualProctorWeb;
2413

14+
import javax.swing.*;
15+
import java.awt.*;
16+
import java.util.ArrayList;
17+
2518
/**
2619
* <img src="http://ftpmirror.your.org/pub/wikimedia/images/wikibooks/de/2/2c/JPanel_Add_JButton_PAGE_END.JPG" style="text-align: left" alt="A window image" height="50" width="75" > Program Window
2720
* allows you to change the color of the background and more...
@@ -39,7 +32,7 @@ public ProgramWindow(String title)
3932
ProgramWindow.createStandardFrame(getFrame());
4033
}
4134
/**
42-
* Adds a button instance to a window
35+
* Adds a button instance to a window
4336
* <p><b>Example:</b> {@code programWindow.addButton(myButton)}</p>
4437
*
4538
* @param button
@@ -84,7 +77,7 @@ public void removePaintable()
8477
repaint();
8578
}
8679
/**
87-
* Adds a right mouse click listener instance to a window
80+
* Adds a right mouse click listener instance to a window
8881
* <p><b>Example:</b> {@code programWindow.addMouseRightClickListener(myRightClickListener)}</p>
8982
*
9083
* @param listener
@@ -95,7 +88,7 @@ public void addMouseRightClickListener(MouseRightClickListener listener)
9588
addMouseListener(new RightClickMouseAdapter(listener));
9689
}
9790
/**
98-
* Adds a left mouse click listener instance to a window
91+
* Adds a left mouse click listener instance to a window
9992
* <p><b>Example:</b> {@code programWindow.addMouseLeftClickListener(myLeftClickListener)}</p>
10093
*
10194
* @param listener
@@ -106,10 +99,10 @@ public void addMouseLeftClickListener(MouseLeftClickListener listener)
10699
addMouseListener(new LeftClickMouseAdapter(listener));
107100
}
108101
/**
109-
* Adds a background image to a window
102+
* Adds a background image to a window
110103
* <p><b>Example:</b> {@code programWindow.setBackgroundImage("http://www.coolpicture.com/sunshine.jpg")}</p>
111104
*
112-
* @param URL
105+
* @param url
113106
* A URL path to an image
114107
*/
115108
public void setBackgroundImage(String url)

src/main/java/org/teachingextensions/WindowUtils/TurtlePanel.java

Lines changed: 47 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.teachingextensions.WindowUtils;
22

3+
import org.teachingextensions.approvals.lite.util.ObjectUtils;
34
import org.teachingextensions.logo.Turtle;
45
import org.teachingextensions.logo.Turtle.Animals;
56
import org.teachingextensions.logo.utils.EventUtils.MouseLeftClickListener;
@@ -11,15 +12,15 @@
1112

1213
import javax.swing.*;
1314
import java.awt.*;
14-
import java.net.URL;
1515
import java.util.ArrayList;
1616

1717
public class TurtlePanel {
18-
private Turtle turtle;
19-
protected Image image;
20-
private TurtleWindow window;
21-
private TurtleTrailPainter trailPainter;
22-
private TurtlePainter turtlePainter;
18+
protected Animals animal = Animals.Turtle;
19+
protected Image image;
20+
private Turtle turtle;
21+
private TurtleWindow window;
22+
private Paintable trailPainter;
23+
private Paintable turtlePainter;
2324

2425
public TurtlePanel() {
2526
this(null, null);
@@ -31,14 +32,15 @@ public TurtlePanel(String title) {
3132

3233
public TurtlePanel(String title, Turtle turtle) {
3334
this.window = new TurtleWindow(title);
34-
configureWindow(turtle);
3535
this.turtle = turtle;
36+
this.image = loadAnimal();
37+
configurePainters();
3638
}
3739

3840
public void setTurtle(Turtle turtle) {
39-
clearWindow();
40-
configureWindow(turtle);
4141
this.turtle = turtle;
42+
clearPainters();
43+
configurePainters();
4244
}
4345

4446
public synchronized Image getImage() {
@@ -49,17 +51,10 @@ public synchronized Image getImage() {
4951
}
5052

5153
public synchronized void setAnimal(Animals animal) {
52-
String name = animal + ".png";
53-
URL resource = this.getClass().getResource(name);
54-
if (resource == null) {
55-
resource = this.getClass().getClassLoader().getResource(name);
56-
}
57-
if (resource == null) {
58-
throw new IllegalStateException("Could not find animal: " + name);
59-
}
60-
this.image = new ImageIcon(resource).getImage();
61-
clearWindow();
62-
configureWindow(this.turtle);
54+
this.animal = animal;
55+
this.image = loadAnimal();
56+
clearPainters();
57+
configurePainters();
6358
}
6459

6560
public void setCursor(int cursor) {
@@ -70,16 +65,22 @@ public void ___() {
7065
// blank for the DeepDive
7166
}
7267

73-
protected void clearWindow() {
68+
protected void clearPainters() {
7469
this.window.remove(this.trailPainter)
7570
.remove(this.turtlePainter);
7671
}
7772

78-
protected void configureWindow(Turtle turtle) {
79-
this.trailPainter = new TurtleTrailPainter(turtle);
80-
this.turtlePainter = new TurtlePainter(turtle, this.getImage());
81-
this.window.add(this.trailPainter)
82-
.add(this.turtlePainter);
73+
protected void configurePainters() {
74+
this.window.add(createTurtleTrailPainter())
75+
.add(createTurtlePainter());
76+
}
77+
78+
protected Paintable createTurtleTrailPainter() {
79+
return this.turtlePainter = new TurtlePainter(this.turtle, this.getImage());
80+
}
81+
82+
protected Paintable createTurtlePainter() {
83+
return this.trailPainter = new TurtleTrailPainter(this.turtle);
8384
}
8485

8586
public TurtleWindow getWindow() {
@@ -113,5 +114,25 @@ public void setBackgroundImage(String picture) {
113114
public ArrayList<Paintable> getAdditional() {
114115
return this.window.additional;
115116
}
117+
118+
protected Image loadAnimal() {
119+
return ObjectUtils.loadImage(MultiTurtleWindow.class, this.animal + ".png");
120+
}
121+
122+
protected Paintable getTrailPainter() {
123+
return trailPainter;
124+
}
125+
126+
protected void setTrailPainter(Paintable trailPainter) {
127+
this.trailPainter = trailPainter;
128+
}
129+
130+
protected Paintable getTurtlePainter() {
131+
return turtlePainter;
132+
}
133+
134+
protected void setTurtlePainter(Paintable turtlePainter) {
135+
this.turtlePainter = turtlePainter;
136+
}
116137
}
117138

src/main/java/org/teachingextensions/logo/utils/InterfaceUtils/MultiTurtlePainter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ public MultiTurtlePainter(List<Turtle> turtles, Image image) {
1919

2020
@Override
2121
public void paint(Graphics2D g, JPanel caller) {
22+
if (this.turtles == null){
23+
return;
24+
}
25+
2226
for (Turtle turtle : turtles)
2327
{
2428
if (turtle.isHidden())

0 commit comments

Comments
 (0)