Skip to content

Commit 86b6c06

Browse files
committed
TurtlePanel => TurtleWindow
1 parent 71755ca commit 86b6c06

19 files changed

Lines changed: 182 additions & 198 deletions

File tree

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
/**
1313
* Use this window when you want to put more than one turtle on the same window
1414
*/
15-
public class MultiTurtleWindow extends TurtlePanel {
15+
public class MultiTurtleWindow extends TurtleWindow {
1616
private List<Turtle> turtles = new ArrayList<Turtle>();
1717

1818
public MultiTurtleWindow() {
1919
super("Turtles, Turtles, Turtles!");
20-
this.getWindow().setBackground(PenColors.Blues.DarkSlateBlue);
20+
this.setBackground(PenColors.Blues.DarkSlateBlue);
2121
}
2222

2323
/**
@@ -32,7 +32,7 @@ public void addTurtle(Turtle turtle) {
3232
if (turtle == null) {
3333
return;
3434
}
35-
turtle.setFrame(this.getWindow().getFrame());
35+
turtle.setFrame(this.getFrame());
3636
turtle.setPanel(this);
3737

3838
this.turtles.add(turtle);

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

Lines changed: 58 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,52 +2,46 @@
22

33
import org.teachingextensions.approvals.lite.util.FrameCloser;
44
import org.teachingextensions.approvals.lite.util.WindowUtils;
5+
import org.teachingextensions.approvals.lite.writers.ComponentApprovalWriter;
56
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
67
import org.teachingextensions.logo.utils.EventUtils.LeftClickMouseAdapter;
78
import org.teachingextensions.logo.utils.EventUtils.MouseLeftClickListener;
89
import org.teachingextensions.logo.utils.EventUtils.MouseRightClickListener;
910
import org.teachingextensions.logo.utils.EventUtils.RightClickMouseAdapter;
11+
import org.teachingextensions.logo.utils.InterfaceUtils.CanvasPanel;
12+
import org.teachingextensions.logo.utils.InterfaceUtils.TurtleFrame;
1013
import org.teachingextensions.logo.utils.LineAndShapeUtils.ImageBackground;
1114
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
1215
import org.teachingextensions.virtualproctor.VirtualProctorWeb;
1316

1417
import javax.swing.*;
1518
import java.awt.*;
16-
import java.util.ArrayList;
19+
import java.awt.image.BufferedImage;
1720

1821
/**
1922
* <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
2023
* allows you to change the color of the background and more...
2124
*/
22-
@SuppressWarnings({"serial"})
23-
public class ProgramWindow extends JPanel {
24-
protected final ArrayList<Paintable> painters = new ArrayList<Paintable>();
25+
public class ProgramWindow {
26+
private final CanvasPanel panel = new CanvasPanel();
2527
private JFrame frame;
2628

2729
public ProgramWindow(String title) {
2830
this();
2931
this.frame = new JFrame(title);
30-
this.frame.getContentPane().add(this);
32+
this.frame.getContentPane().add(this.panel);
3133
ProgramWindow.createStandardFrame(getFrame());
3234
}
3335

3436
public ProgramWindow() {
35-
setPreferredSize(new Dimension(627, 442));
37+
this.panel.setPreferredSize(new Dimension(627, 442));
3638
setColor(PenColors.Whites.White);
3739
}
3840

3941
public static void createStandardFrame(JFrame frame) {
4042
WindowUtils.testFrame(frame, new VirtualProctorWeb(), new FrameCloser());
4143
}
4244

43-
public static Graphics2D configureGraphics2D(Graphics g) {
44-
Graphics2D g2d = (Graphics2D) g.create();
45-
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
46-
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
47-
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
48-
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
49-
return g2d;
50-
}
5145

5246
/**
5347
* Adds a button instance to a window
@@ -57,30 +51,17 @@ public static Graphics2D configureGraphics2D(Graphics g) {
5751
* A button instance
5852
*/
5953
public void addButton(JButton button) {
60-
this.add(button);
54+
this.panel.add(button);
6155
}
6256

63-
@Override
64-
public void paint(Graphics g) {
65-
super.paint(g);
66-
if (this.painters == null) {
67-
return;
68-
}
69-
70-
ArrayList<Paintable> toPaint = new ArrayList<>(this.painters);
71-
72-
Graphics2D g2d = configureGraphics2D(g);
73-
for (Paintable p : toPaint) {
74-
p.paint(g2d, this);
75-
}
76-
}
7757

7858
public void setColor(Color backgroundColor) {
79-
setBackground(backgroundColor);
59+
this.panel.setBackground(backgroundColor);
8060
}
8161

62+
@Deprecated
8263
public ProgramWindow clearWindow() {
83-
this.painters.clear();
64+
this.panel.clear();
8465
return this;
8566
}
8667

@@ -92,7 +73,7 @@ public ProgramWindow clearWindow() {
9273
* A listener instance
9374
*/
9475
public void addMouseRightClickListener(MouseRightClickListener listener) {
95-
addMouseListener(new RightClickMouseAdapter(listener));
76+
this.panel.addMouseListener(new RightClickMouseAdapter(listener));
9677
}
9778

9879
/**
@@ -103,7 +84,7 @@ public void addMouseRightClickListener(MouseRightClickListener listener) {
10384
* A listener instance
10485
*/
10586
public void addMouseLeftClickListener(MouseLeftClickListener listener) {
106-
addMouseListener(new LeftClickMouseAdapter(listener));
87+
this.panel.addMouseListener(new LeftClickMouseAdapter(listener));
10788
}
10889

10990
/**
@@ -123,22 +104,58 @@ public JFrame getFrame() {
123104

124105
public void setWindowVisible(boolean b) {
125106
this.frame.setVisible(b);
126-
this.setVisible(b);
107+
this.panel.setVisible(b);
127108
}
128109

110+
@Deprecated
129111
public ProgramWindow add(Paintable painter) {
130-
if (!this.painters.contains(painter)) {
131-
this.painters.add(painter);
132-
}
133-
112+
this.panel.add(painter);
134113
return this;
135114
}
136115

116+
@Deprecated
137117
public ProgramWindow remove(Paintable painter) {
138-
if (this.painters.contains(painter)) {
139-
this.painters.remove(painter);
140-
}
118+
this.panel.remove(painter);
119+
return this;
120+
}
121+
122+
123+
public final BufferedImage getWindowImage() {
124+
return ComponentApprovalWriter.drawComponent(this.panel);
125+
}
126+
127+
public ProgramWindow addTo(TurtleFrame frame) {
128+
frame.addContent(this.panel);
129+
return this;
130+
}
131+
132+
public ProgramWindow repaint() {
133+
this.panel.repaint();
134+
return this;
135+
}
136+
137+
public ProgramWindow setVisible(boolean visible) {
138+
this.panel.setVisible(visible);
139+
return this;
140+
}
141+
142+
public ProgramWindow setCursor(int cursor) {
143+
this.setCursor(Cursor.getPredefinedCursor(cursor));
144+
return this;
145+
}
141146

147+
public ProgramWindow setCursor(Cursor predefinedCursor) {
148+
this.panel.setCursor(predefinedCursor);
149+
return this;
150+
}
151+
152+
public CanvasPanel getCanvas() {
153+
return this.panel;
154+
}
155+
156+
public ProgramWindow setBackground(Color color) {
157+
this.panel.setBackground(color);
142158
return this;
143159
}
144160
}
161+

src/main/java/org/teachingextensions/WindowUtils/TurtlePanel.java renamed to src/main/java/org/teachingextensions/WindowUtils/TurtleWindow.java

Lines changed: 11 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,29 @@
33
import org.teachingextensions.approvals.lite.util.ObjectUtils;
44
import org.teachingextensions.logo.Turtle;
55
import org.teachingextensions.logo.Turtle.Animals;
6-
import org.teachingextensions.logo.utils.EventUtils.MouseLeftClickListener;
7-
import org.teachingextensions.logo.utils.EventUtils.MouseRightClickListener;
86
import org.teachingextensions.logo.utils.InterfaceUtils.TurtlePainter;
97
import org.teachingextensions.logo.utils.InterfaceUtils.TurtleTrailPainter;
108
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
119

12-
import javax.swing.*;
1310
import java.awt.*;
14-
import java.util.ArrayList;
1511

16-
public class TurtlePanel {
12+
public class TurtleWindow extends ProgramWindow {
1713
protected Animals animal = Animals.Turtle;
18-
protected Image image;
19-
private Turtle turtle;
20-
private ProgramWindow window;
21-
private Paintable trailPainter;
22-
private Paintable turtlePainter;
14+
protected Image image;
15+
private Turtle turtle;
16+
private Paintable trailPainter;
17+
private Paintable turtlePainter;
2318

24-
public TurtlePanel() {
19+
public TurtleWindow() {
2520
this(null, null);
2621
}
2722

28-
public TurtlePanel(String title) {
23+
public TurtleWindow(String title) {
2924
this(title, null);
3025
}
3126

32-
public TurtlePanel(String title, Turtle turtle) {
33-
this.window = new ProgramWindow(title);
27+
public TurtleWindow(String title, Turtle turtle) {
28+
super(title);
3429
this.turtle = turtle;
3530
this.image = loadAnimal();
3631
configurePainters();
@@ -56,21 +51,17 @@ public synchronized void setAnimal(Animals animal) {
5651
configurePainters();
5752
}
5853

59-
public void setCursor(int cursor) {
60-
this.window.setCursor(Cursor.getPredefinedCursor(cursor));
61-
}
62-
6354
public void ___() {
6455
// blank for the DeepDive
6556
}
6657

6758
protected void clearPainters() {
68-
this.window.remove(this.trailPainter)
59+
this.getCanvas().remove(this.trailPainter)
6960
.remove(this.turtlePainter);
7061
}
7162

7263
protected void configurePainters() {
73-
this.window.add(createTurtleTrailPainter())
64+
this.getCanvas().add(createTurtleTrailPainter())
7465
.add(createTurtlePainter());
7566
}
7667

@@ -82,38 +73,6 @@ protected Paintable createTurtlePainter() {
8273
return this.trailPainter = new TurtleTrailPainter(this.turtle);
8374
}
8475

85-
public ProgramWindow getWindow() {
86-
return window;
87-
}
88-
89-
public void setColor(Color color) {
90-
this.getWindow().setColor(color);
91-
}
92-
93-
public void addButton(JButton leftButton) {
94-
this.getWindow().addButton(leftButton);
95-
}
96-
97-
public void setBackground(Color color) {
98-
this.getWindow().setBackground(color);
99-
}
100-
101-
public void addMouseLeftClickListener(MouseLeftClickListener listener) {
102-
this.getWindow().addMouseLeftClickListener(listener);
103-
}
104-
105-
public void addMouseRightClickListener(MouseRightClickListener listener) {
106-
this.getWindow().addMouseRightClickListener(listener);
107-
}
108-
109-
public void setBackgroundImage(String picture) {
110-
this.getWindow().setBackgroundImage(picture);
111-
}
112-
113-
public ArrayList<Paintable> getAdditional() {
114-
return this.window.painters;
115-
}
116-
11776
protected Image loadAnimal() {
11877
return ObjectUtils.loadImage(MultiTurtleWindow.class, this.animal + ".png");
11978
}

src/main/java/org/teachingextensions/logo/Tortoise.java

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

3-
import java.awt.Color;
4-
5-
import org.teachingextensions.WindowUtils.TurtlePanel;
3+
import org.teachingextensions.WindowUtils.TurtleWindow;
64
import org.teachingextensions.logo.Turtle.Animals;
7-
import org.teachingextensions.logo.utils.TortoiseUtils;
85
import org.teachingextensions.logo.utils.ColorUtils.PenColors;
96
import org.teachingextensions.logo.utils.LineAndShapeUtils.Text;
107
import org.teachingextensions.logo.utils.PizzaUtils.Pizza;
118
import org.teachingextensions.logo.utils.PizzaUtils.Topping;
9+
import org.teachingextensions.logo.utils.TortoiseUtils;
1210
import org.teachingextensions.virtualproctor.VirtualProctor;
1311

12+
import java.awt.*;
13+
1414
/**
1515
* <img src="https://lh5.googleusercontent.com/-B3Q59gpYW8o/T4tA2k_TYUI/AAAAAAAAAjo/WiqdoXjbkb0/s65/Tortoise.png" style="text-align: left" alt="A tortoise drawing a line" >
1616
* The Tortoise allows you to draw lines and shapes by moving it around on the window
@@ -99,7 +99,7 @@ public static void setPenWidth(Number width)
9999
* <b>Example:</b> {@code TurtlePanel panel = Tortoise.getBackgroundWindow()}
100100
* @return the (program) window that the Tortoise is moving on
101101
*/
102-
public static TurtlePanel getBackgroundWindow()
102+
public static TurtleWindow getBackgroundWindow()
103103
{
104104
return turtle().getBackgroundWindow();
105105
}
@@ -263,9 +263,9 @@ public static void moveTo(int x, int y)
263263
{
264264
turtle().moveTo(x, y);
265265
}
266-
public static TurtlePanel ___()
266+
public static TurtleWindow ___()
267267
{
268-
return new TurtlePanel();
268+
return new TurtleWindow();
269269
}
270270
private Topping topping;
271271
/**
@@ -310,7 +310,7 @@ public static void drawShape(int sides, Color color, int length, int width)
310310
{
311311
Tortoise.show();
312312
Tortoise.setSpeed(7);
313-
Tortoise.getBackgroundWindow().setBackground(PenColors.Yellows.Goldenrod);
313+
Tortoise.getBackgroundWindow().getCanvas().setBackground(PenColors.Yellows.Goldenrod);
314314
new Text("TKP Java - Make Some Shapes!").setTopLeft(225, 50).addTo(Tortoise.getBackgroundWindow());
315315
for (int i = 0; i < sides; i++)
316316
{

0 commit comments

Comments
 (0)