/* * * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * - Neither the name of Oracle nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package java2d.demos.Arcs_Curves; import java.awt.*; import java.awt.geom.Ellipse2D; import java2d.AnimatingSurface; import static java.awt.Color.*; /** * Ellipse2D 25 animated expanding ellipses. */ @SuppressWarnings("serial") public final class Ellipses extends AnimatingSurface { private static Color colors[] = { BLUE, CYAN, GREEN, MAGENTA, ORANGE, PINK, RED, YELLOW, LIGHT_GRAY, WHITE }; private Ellipse2D.Float[] ellipses; private double esize[]; private float estroke[]; private double maxSize; public Ellipses() { setBackground(BLACK); ellipses = new Ellipse2D.Float[25]; esize = new double[ellipses.length]; estroke = new float[ellipses.length]; for (int i = 0; i < ellipses.length; i++) { ellipses[i] = new Ellipse2D.Float(); getRandomXY(i, 20 * Math.random(), 200, 200); } } public void getRandomXY(int i, double size, int w, int h) { esize[i] = size; estroke[i] = 1.0f; double x = Math.random() * (w - (maxSize / 2)); double y = Math.random() * (h - (maxSize / 2)); ellipses[i].setFrame(x, y, size, size); } @Override public void reset(int w, int h) { maxSize = w / 10; for (int i = 0; i < ellipses.length; i++) { getRandomXY(i, maxSize * Math.random(), w, h); } } @Override public void step(int w, int h) { for (int i = 0; i < ellipses.length; i++) { estroke[i] += 0.025f; esize[i]++; if (esize[i] > maxSize) { getRandomXY(i, 1, w, h); } else { ellipses[i].setFrame(ellipses[i].getX(), ellipses[i].getY(), esize[i], esize[i]); } } } @Override public void render(int w, int h, Graphics2D g2) { for (int i = 0; i < ellipses.length; i++) { g2.setColor(colors[i % colors.length]); g2.setStroke(new BasicStroke(estroke[i])); g2.draw(ellipses[i]); } } public static void main(String argv[]) { createDemoFrame(new Ellipses()); } }