Skip to content

Commit 6dabe3c

Browse files
committed
fixed BackgroundImage Recipe
1 parent d13ef50 commit 6dabe3c

10 files changed

Lines changed: 185 additions & 167 deletions

File tree

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

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

3+
import java.awt.Color;
4+
import java.awt.Cursor;
5+
import java.awt.Dimension;
6+
import java.awt.event.MouseListener;
7+
import java.awt.image.BufferedImage;
8+
9+
import javax.swing.JButton;
10+
import javax.swing.JFrame;
11+
312
import org.teachingextensions.approvals.lite.util.FrameCloser;
413
import org.teachingextensions.approvals.lite.util.WindowUtils;
514
import org.teachingextensions.approvals.lite.writers.ComponentApprovalWriter;
@@ -14,190 +23,188 @@
1423
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
1524
import org.teachingextensions.virtualproctor.VirtualProctorWeb;
1625

17-
import javax.swing.*;
18-
import java.awt.*;
19-
import java.awt.event.MouseListener;
20-
import java.awt.image.BufferedImage;
21-
2226
/**
2327
* <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
2428
* allows you to change the color of the background and more...
2529
*/
26-
public class ProgramWindow {
30+
public class ProgramWindow
31+
{
2732
private final LazyCanvas canvas = new LazyCanvas();
28-
private JFrame frame;
29-
30-
public ProgramWindow(String title) {
33+
private JFrame frame;
34+
public ProgramWindow(String title)
35+
{
3136
this();
3237
this.frame = new JFrame(title);
3338
this.canvas.addTo(this.frame);
3439
ProgramWindow.createStandardFrame(getFrame());
3540
}
36-
37-
public ProgramWindow() {
41+
public ProgramWindow()
42+
{
3843
this.canvas.setPreferredSize(new Dimension(627, 442));
3944
setColor(PenColors.Whites.White);
4045
}
41-
42-
public static void createStandardFrame(JFrame frame) {
46+
public static void createStandardFrame(JFrame frame)
47+
{
4348
WindowUtils.testFrame(frame, new VirtualProctorWeb(), new FrameCloser());
4449
}
45-
46-
4750
/**
4851
* Adds a button instance to a window
4952
* <p><b>Example:</b> {@code programWindow.addButton(myButton)}</p>
5053
*
5154
* @param button
5255
* A button instance
5356
*/
54-
public void addButton(JButton button) {
57+
public void addButton(JButton button)
58+
{
5559
this.canvas.add(button);
5660
}
57-
58-
59-
public void setColor(Color backgroundColor) {
61+
public void setColor(Color backgroundColor)
62+
{
6063
this.canvas.setBackground(backgroundColor);
6164
}
62-
63-
public ProgramWindow clearWindow() {
65+
public ProgramWindow clearWindow()
66+
{
6467
this.canvas.clear();
6568
return this;
6669
}
67-
6870
/**
6971
* Adds a right mouse click listener instance to a window
7072
* <p><b>Example:</b> {@code programWindow.addMouseRightClickListener(myRightClickListener)}</p>
7173
*
7274
* @param listener
7375
* A listener instance
7476
*/
75-
public void addMouseRightClickListener(MouseRightClickListener listener) {
77+
public void addMouseRightClickListener(MouseRightClickListener listener)
78+
{
7679
this.canvas.addMouseListener(new RightClickMouseAdapter(listener));
7780
}
78-
7981
/**
8082
* Adds a left mouse click listener instance to a window
8183
* <p><b>Example:</b> {@code programWindow.addMouseLeftClickListener(myLeftClickListener)}</p>
8284
*
8385
* @param listener
8486
* A listener instance
8587
*/
86-
public void addMouseLeftClickListener(MouseLeftClickListener listener) {
88+
public void addMouseLeftClickListener(MouseLeftClickListener listener)
89+
{
8790
this.canvas.addMouseListener(new LeftClickMouseAdapter(listener));
8891
}
89-
9092
/**
9193
* Adds a background image to a window
9294
* <p><b>Example:</b> {@code programWindow.setBackgroundImage("http://www.coolpicture.com/sunshine.jpg")}</p>
9395
*
9496
* @param url
9597
* A URL path to an image
9698
*/
97-
public void setBackgroundImage(String url) {
99+
public void setBackgroundImage(String url)
100+
{
98101
add(new ImageBackground(url));
99102
}
100-
101-
public JFrame getFrame() {
103+
public JFrame getFrame()
104+
{
102105
return frame;
103106
}
104-
105-
public void setWindowVisible(boolean b) {
107+
public void setWindowVisible(boolean b)
108+
{
106109
this.frame.setVisible(b);
107110
this.canvas.getValue().setVisible(b);
108111
}
109-
110112
@Deprecated
111-
public ProgramWindow add(Paintable painter) {
113+
public ProgramWindow add(Paintable painter)
114+
{
112115
this.canvas.getValue().add(painter);
113116
return this;
114117
}
115-
116118
@Deprecated
117-
public ProgramWindow remove(Paintable painter) {
119+
public ProgramWindow remove(Paintable painter)
120+
{
118121
this.canvas.getValue().remove(painter);
119122
return this;
120123
}
121-
122-
123-
public final BufferedImage getWindowImage() {
124+
public final BufferedImage getWindowImage()
125+
{
124126
return ComponentApprovalWriter.drawComponent(this.canvas.getValue());
125127
}
126-
127-
public ProgramWindow addTo(TurtleFrame frame) {
128+
public ProgramWindow addTo(TurtleFrame frame)
129+
{
128130
frame.addContent(this.canvas.getValue());
129131
return this;
130132
}
131-
132-
public ProgramWindow repaint() {
133+
public ProgramWindow repaint()
134+
{
133135
this.canvas.getValue().repaint();
134136
return this;
135137
}
136-
137-
public ProgramWindow setVisible(boolean visible) {
138+
public ProgramWindow setVisible(boolean visible)
139+
{
138140
this.canvas.getValue().setVisible(visible);
139141
return this;
140142
}
141-
142-
public ProgramWindow setCursor(int cursor) {
143+
public ProgramWindow setCursor(int cursor)
144+
{
143145
this.setCursor(Cursor.getPredefinedCursor(cursor));
144146
return this;
145147
}
146-
147-
public ProgramWindow setCursor(Cursor predefinedCursor) {
148+
public ProgramWindow setCursor(Cursor predefinedCursor)
149+
{
148150
this.canvas.getValue().setCursor(predefinedCursor);
149151
return this;
150152
}
151-
152-
public ProgramWindow setBackground(Color color) {
153+
public ProgramWindow setBackground(Color color)
154+
{
153155
this.canvas.setBackground(color);
154156
return this;
155157
}
156-
157-
public CanvasPanel getCanvas() {
158+
public CanvasPanel getCanvas()
159+
{
158160
return this.canvas.getValue();
159161
}
160-
161-
private class LazyCanvas {
162+
private class LazyCanvas
163+
{
162164
private CanvasPanel panel;
163-
164-
public LazyCanvas addTo(JFrame frame) {
165+
public LazyCanvas addTo(JFrame frame)
166+
{
165167
frame.getContentPane().add(this.getValue());
166168
return this;
167169
}
168-
169-
public CanvasPanel getValue() {
170-
if (this.panel == null){
170+
public CanvasPanel getValue()
171+
{
172+
if (this.panel == null)
173+
{
171174
this.panel = new CanvasPanel();
172175
}
173-
174176
return panel;
175177
}
176-
177-
public LazyCanvas setPreferredSize(Dimension dimension) {
178+
public LazyCanvas setPreferredSize(Dimension dimension)
179+
{
178180
this.getValue().setPreferredSize(dimension);
179181
return this;
180182
}
181-
182-
public LazyCanvas add(JButton button) {
183+
public LazyCanvas add(JButton button)
184+
{
183185
this.getValue().add(button);
184186
return this;
185187
}
186-
187-
public LazyCanvas setBackground(Color color) {
188+
public LazyCanvas setBackground(Color color)
189+
{
188190
this.getValue().setBackground(color);
189191
return this;
190192
}
191-
192-
public LazyCanvas clear() {
193+
public LazyCanvas clear()
194+
{
193195
this.getValue().clear();
194196
return this;
195197
}
196-
197-
public LazyCanvas addMouseListener(MouseListener adapter) {
198+
public LazyCanvas addMouseListener(MouseListener adapter)
199+
{
198200
this.getValue().addMouseListener(adapter);
199201
return this;
200202
}
203+
@SuppressWarnings("unused")
204+
public LazyCanvas setImageBackground(ImageBackground imageBackground)
205+
{
206+
this.getValue().setBackground(imageBackground);
207+
return this;
208+
}
201209
}
202210
}
203-
Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,70 @@
11
package org.teachingextensions.logo.utils.InterfaceUtils;
22

3-
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
4-
5-
import javax.swing.*;
6-
import java.awt.*;
3+
import java.awt.Graphics;
4+
import java.awt.Graphics2D;
5+
import java.awt.RenderingHints;
76
import java.util.ArrayList;
87

9-
public class CanvasPanel extends JPanel {
10-
private final ArrayList<Paintable> painters = new ArrayList<Paintable>();
8+
import javax.swing.JPanel;
119

12-
private static Graphics2D configureGraphics2D(Graphics g) {
10+
import org.teachingextensions.logo.utils.LineAndShapeUtils.ImageBackground;
11+
import org.teachingextensions.logo.utils.LineAndShapeUtils.Paintable;
12+
13+
@SuppressWarnings("serial")
14+
public class CanvasPanel extends JPanel
15+
{
16+
private final ArrayList<Paintable> painters = new ArrayList<Paintable>();
17+
private static Graphics2D configureGraphics2D(Graphics g)
18+
{
1319
Graphics2D g2d = (Graphics2D) g.create();
1420
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
1521
g2d.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);
1622
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
1723
g2d.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
1824
return g2d;
1925
}
20-
2126
@Override
22-
public void paint(Graphics g) {
27+
public void paint(Graphics g)
28+
{
2329
super.paint(g);
24-
2530
Graphics2D g2d = configureGraphics2D(g);
26-
for (Paintable p : this.getPainters()) {
31+
for (Paintable p : this.getPainters())
32+
{
2733
p.paint(g2d, this);
2834
}
2935
}
30-
31-
public CanvasPanel remove(Paintable painter) {
32-
if (this.painters.contains(painter)) {
36+
public CanvasPanel remove(Paintable painter)
37+
{
38+
if (this.painters.contains(painter))
39+
{
3340
this.painters.remove(painter);
3441
}
3542
return this;
3643
}
37-
38-
public CanvasPanel add(Paintable painter) {
39-
if (!this.painters.contains(painter)) {
44+
public CanvasPanel add(Paintable painter)
45+
{
46+
if (!this.painters.contains(painter))
47+
{
4048
this.painters.add(painter);
4149
}
4250
this.repaint();
4351
return this;
4452
}
45-
46-
public CanvasPanel clear() {
53+
public CanvasPanel clear()
54+
{
4755
this.painters.clear();
4856
return this;
4957
}
50-
51-
public ArrayList<Paintable> getPainters() {
58+
public ArrayList<Paintable> getPainters()
59+
{
5260
return new ArrayList<>(this.painters);
5361
}
62+
public void setBackground(ImageBackground imageBackground)
63+
{
64+
if (this.painters.contains(imageBackground))
65+
{
66+
this.painters.remove(imageBackground);
67+
}
68+
return;
69+
}
5470
}

src/main/java/org/teachingkidsprogramming/recipes/completed/section00demos/QuickShape.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,13 @@ public static void main(String[] args) throws Exception
1313
Tortoise.show();
1414
Tortoise.setAnimal(Animals.Squid);
1515
Tortoise.setX(150);
16-
// Tip: Use the Tortoise object to draw shapes!
17-
// Draw a red square that is 50 pixels per side with a line that's 2 pixels thick
1816
Tortoise.drawShape(4, PenColors.Reds.Red, 75, 4);
19-
// Draw a blue hexagon that is 65 pixels per side with a line that's 40 pixels thick
2017
Tortoise.setX(425);
2118
Tortoise.drawShape(6, PenColors.Blues.Blue, 65, 40);
2219
Tortoise.setX(250);
2320
Tortoise.setY(375);
2421
Random r = new Random();
2522
int sides = r.nextInt(10) + 1;
26-
// Draw a purple shape that is 50 pixel on each side with a line that's 10 pixels thick
2723
Tortoise.drawShape(sides, PenColors.Purples.Purple, 50, 10);
2824
}
29-
// See your "work" at http://virtualproctor.tkpjava.org
3025
}

0 commit comments

Comments
 (0)