/* * Copyright 2007 Sun Microsystems, Inc. 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 Sun Microsystems 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 org.jdesktop.swingxset; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; import java.awt.Insets; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.SwingUtilities; import org.jdesktop.animation.timing.Animator; import org.jdesktop.animation.timing.interpolation.PropertySetter; import org.jdesktop.application.Action; import org.jdesktop.application.Application; import org.jdesktop.swingx.JXPanel; import org.jdesktop.swingx.painter.AbstractLayoutPainter.HorizontalAlignment; import org.jdesktop.swingx.painter.AbstractLayoutPainter.VerticalAlignment; import org.jdesktop.swingx.painter.CompoundPainter; import org.jdesktop.swingx.painter.ImagePainter; import org.jdesktop.swingx.util.GraphicsUtilities; import com.sun.swingset3.DemoProperties; /** * * @author Amy Fowler */ @DemoProperties( value = "IntroSplash", category = "Intro", description = "Demonstrates an in-application splash with animation effect.", sourceFiles = { "org/jdesktop/swingxset/IntroPanelDemo.java", "org/jdesktop/swingxset/SwingXSet.java", "org/jdesktop/swingx/appframework/SingleXFrameApplication.java", "org/jdesktop/swingx/appframework/XProperties.java" } ) /** * Intro panel which uses compound, animated painters to show the app image. */ public class IntroPanelDemo extends JXPanel { @SuppressWarnings("unused") private static final Logger LOG = Logger.getLogger(IntroPanelDemo.class .getName()); private SlidingPainter textImagePainter; private ImagePainter introImagePainter; public IntroPanelDemo() { setName("introPanel"); // <snip> ImagePainters for intro introImagePainter = new ImagePainter(); introImagePainter.setFillHorizontal(true); introImagePainter.setVerticalAlignment(VerticalAlignment.TOP); textImagePainter = new SlidingPainter(); textImagePainter.setVisible(false); textImagePainter.setHorizontalAlignment(HorizontalAlignment.LEFT); textImagePainter.setVerticalAlignment(VerticalAlignment.TOP); setBackgroundPainter(new CompoundPainter<Object>(introImagePainter, textImagePainter)); // </snip> Application.getInstance().getContext().getResourceMap(getClass()).injectComponents(this); bind(); } /** * */ private void bind() { addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent event) { slideTextIn(); } }); } /** * Configures the intro image painter with the given image, converting * to a BufferedImage if necessary. * * @param image */ public void setIntroImage(Image image) { introImagePainter.setImage(image instanceof BufferedImage ? (BufferedImage) image : GraphicsUtilities.convertToBufferedImage(image)); } /** * Configures the text image painter with the given image, converting * to a BufferedImage if necessary. * * @param image */ // <snip> ImagePainters for intro // the image is loaded via resource injection public void setTextImage(Image image) { textImagePainter.setImage(image instanceof BufferedImage ? (BufferedImage) image : GraphicsUtilities.convertToBufferedImage(image)); } // </snip> @Override public void paint(Graphics g) { super.paint(g); // <snip> ImagePainters for intro // start animation of text if (!textImagePainter.isVisible()) { slideTextIn(); textImagePainter.setVisible(true); } } // create, configure and start an animator on the painter's // horizontal location @Action public void slideTextIn() { Animator animator = new Animator(800, new PropertySetter(textImagePainter, "x", getWidth(), 30)); animator.setStartDelay(800); animator.setAcceleration(.2f); animator.setDeceleration(.5f); animator.start(); // </snip> } public void slideTextOut() { Animator animator = new Animator(600, new PropertySetter(textImagePainter, "x", textImagePainter.getX(), -getWidth())); animator.setStartDelay(10); animator.setAcceleration(.5f); animator.setDeceleration(.2f); animator.start(); } public class SlidingPainter extends ImagePainter { public SlidingPainter(BufferedImage image) { super(image); // move out of the way ;-) setX(2000); } public SlidingPainter() { this(null); } public void setX(int x) { setInsets(new Insets(110, x, 0, 0)); // hack around an open issue in swingx: // CompoundPainter doesn't propagate property changes of contained // painters repaint(); } public int getX() { return getInsets() != null ? getInsets().left : 0; } } /** * main method allows us to run as a standalone demo. */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame(IntroPanelDemo.class.getAnnotation(DemoProperties.class).value()); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(new IntroPanelDemo()); frame.setPreferredSize(new Dimension(800, 600)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } }