/** * File: Sky.java * Author: Brian Borowski * Date created: August 1, 2011 * Date last modified: January 21, 2013 */ import java.awt.Color; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.Random; import javax.swing.JPanel; public class Sky { private final static int DEFAULT_HEIGHT = 40, NUM_STARS = 120; private final JPanel parent; private final int landscapeHeight; private final Color purple = new Color(38, 47, 145); private GradientPaint gradientPaint = null; private Star[] stars; class Star { public int x, y; public Star(final int x, final int y) { this.x = x; this.y = y; } } public Sky(final JPanel parent, final int landscapeHeight) { this.parent = parent; this.landscapeHeight = landscapeHeight; this.stars = null; } public int getHeight() { return DEFAULT_HEIGHT; } public void paintComponent(final Graphics g) { final int height = parent.getHeight(), width = parent.getWidth(); if (stars == null) { stars = new Star[NUM_STARS]; final Random randomGenerator = new Random(); for (int i = NUM_STARS - 1; i >= 0; --i) { final int x = randomGenerator.nextInt(parent.getWidth() - 3) + 3, y = randomGenerator.nextInt(5 * parent.getHeight() / 6) + 3; stars[i] = new Star(x, y); } gradientPaint = new GradientPaint(0, 0, Color.black, 0, height - landscapeHeight, purple); } final Graphics2D g2d = (Graphics2D)g; g2d.setPaint(gradientPaint); g2d.fillRect(0, 0, width, height - landscapeHeight); g2d.setColor(Color.white); for (Star star: stars) { g2d.fillOval(star.x, star.y, 1, 2); } } }