Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #17947

Re: Light Box Effect (2 Windows, 1 Smaller And Active Above Inactive Grayed-Out Window)

From clusardi2k@aol.com
Newsgroups comp.lang.java.programmer
Subject Re: Light Box Effect (2 Windows, 1 Smaller And Active Above Inactive Grayed-Out Window)
Date 2012-08-17 05:47 -0700
Organization http://groups.google.com
Message-ID <ce05b2e5-79e0-43ab-a4db-0a29b44dae27@googlegroups.com> (permalink)
References <0456a851-4fa4-4a8e-9a98-86d6e99b5aab@googlegroups.com> <jvh5pv$m92$1@dont-email.me> <4bc0bc90-c6b8-49fb-98b5-a5c5925be3f9@googlegroups.com> <jvorfb$q84$1@dont-email.me>

Show all headers | View raw


On Friday, August 17, 2012 8:30:58 AM UTC-4, (unknown) wrote:
> The book is here: http://www.scribd.com/doc/15490884/Swing-Hacks-Tips-and-Tools-for-Killer-GUIs

Here's the HACK #45 code from the book. It has two buttons. If you press one of th buttons everything on the screen will move away and the screen will become blank.

Question: How on Earth do I convert this into a light box effect.

Here is a link to other fun JLayer examples:

http://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html

//File: SheetTest.java
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package anisheetablejframe;

	import javax.swing.*;
	import java.awt.*; 
	import java.awt.event.*; 
	import java.beans.*;

	public class SheetTest extends Object 
		implements PropertyChangeListener {

		JOptionPane optionPane;
		AniSheetableJFrame frame;

		public static void main (String[] args) {
			new SheetTest( );
		}

		public SheetTest ( ) {
			frame = new AniSheetableJFrame ("Sheet test");
			// put an image in the frame's content pane
			ImageIcon icon = new ImageIcon ("keagy-lunch.png");
			JLabel label = new JLabel (icon);
			frame.getContentPane( ).add(label);
			// build JOptionPane dialog and hold onto it
			optionPane = new JOptionPane ("Do you want to save?",
							JOptionPane.QUESTION_MESSAGE, 
							JOptionPane.YES_NO_OPTION);
		frame.pack( );
			frame.setVisible(true);
			optionPane.addPropertyChangeListener (this);
			// pause for effect, then show the sheet
			try {Thread.sleep(1000);}
			catch (InterruptedException ie) {}
			JDialog dialog =
				optionPane.createDialog (frame, "irrelevant");
			frame.showJDialogAsSheet (dialog);
		}

		public void propertyChange (PropertyChangeEvent pce) { 
		   if (pce.getPropertyName( ).equals (JOptionPane.VALUE_PROPERTY)) {
				System.out.println ("Selected option " +
						pce.getNewValue( ));
				frame.hideSheet( ); 
		   } 
		} 
	}

//---------------------------
//File AnimatingSheet.java
package anisheetablejframe;

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.JComponent;
import javax.swing.JPanel;

class AnimatingSheet extends JPanel { 
		Dimension animatingSize = new Dimension (0, 1); 
		JComponent source; 
		BufferedImage offscreenImage;    
		public AnimatingSheet ( ) {
			super( );
			setOpaque(true);
		}
		public void setSource (JComponent source) {
			this.source = source;
			animatingSize.width = source.getWidth( );
			makeOffscreenImage(source);
		}
		public void setAnimatingHeight (int height) {
			animatingSize.height = height;
			setSize (animatingSize);
		}
		private void makeOffscreenImage(JComponent source) {
			GraphicsConfiguration gfxConfig =
				GraphicsEnvironment.getLocalGraphicsEnvironment( )
					   .getDefaultScreenDevice( )
					   .getDefaultConfiguration( );
			offscreenImage =
				gfxConfig.createCompatibleImage(source.getWidth( ),
									source.getHeight( )); 
			Graphics2D offscreenGraphics =
				(Graphics2D) offscreenImage.getGraphics( );
			source.paint (offscreenGraphics); 
		}    
		public Dimension getPreferredSize( ) {  return animatingSize; }
		public Dimension getMinimumSize( ) { return animatingSize; }    
		public Dimension getMaximumSize( ) { return animatingSize; }
		public void paint (Graphics g) {
			// get the bottom-most n pixels of source and 
			// paint them into g, where n is height

                    int x = 0;
                    int y = offscreenImage.getHeight() - animatingSize.height;
                    int w = source.getWidth();
                    int h = animatingSize.height;
                    
			BufferedImage fragment = 
				offscreenImage.getSubimage (x,y,w,h);
			// g.drawImage (fragment, 0, 0, this); 
			g.drawImage (fragment, 0, 0, this); 
		} 
	}

//---------------------------
//File    AniSheettableJFrame.java
package anisheetablejframe;

import javax.swing.*; 
	import javax.swing.border.*; 
	import java.awt.*; 
	import java.awt.event.*; 
	import java.awt.image.*;

	public class AniSheetableJFrame extends JFrame 
		implements ActionListener {

		public static final int INCOMING = 1;
		public static final int OUTGOING = -1;
		public static final float ANIMATION_DURATION = 1000f;
		public static final int ANIMATION_SLEEP = 50;

		JComponent sheet;
		JPanel glass;
		AnimatingSheet animatingSheet;
		boolean animating;
		int animationDirection;
		Timer animationTimer;
		long animationStart;
		BufferedImage offscreenImage;

		public AniSheetableJFrame (String name) {
			super(name);
			glass = (JPanel) getGlassPane( );
			glass.setLayout (new GridBagLayout( ));
			animatingSheet = new AnimatingSheet( );
			animatingSheet.setBorder (new LineBorder(Color.black, 1));
		}
public JComponent showJDialogAsSheet (JDialog dialog) {
			sheet = (JComponent) dialog.getContentPane( );
			sheet.setBorder (new LineBorder(Color.black, 1));
			glass.removeAll( );
			animationDirection = INCOMING;
			startAnimation( );
			return sheet;
		}

		public void hideSheet( ) {
			animationDirection = OUTGOING;
			startAnimation( );
		}

		private void startAnimation( ) {
			glass.repaint( );
			// clear glasspane and set up animatingSheet
			animatingSheet.setSource (sheet);
			glass.removeAll( );
			GridBagConstraints gbc = new GridBagConstraints( );
			gbc.anchor = GridBagConstraints.NORTH;
			glass.add (animatingSheet, gbc);
			gbc.gridy=1;
			gbc.weighty = Integer.MAX_VALUE;
			glass.add (Box.createGlue( ), gbc);
			glass.setVisible(true);

			// start animation timer
			animationStart = System.currentTimeMillis( );
			if (animationTimer == null)
				animationTimer = new Timer (ANIMATION_SLEEP, this);
			animating = true;
			animationTimer.start( );
		}

		private void stopAnimation( ) {
			animationTimer.stop( );
			animating = false;
		}

		// used by the Timer
		public void actionPerformed (ActionEvent e) {
			if (animating) {
				// calculate height to show
				float animationPercent =
				(System.currentTimeMillis( ) - animationStart) /
				ANIMATION_DURATION; 
				animationPercent = Math.min (1.0f, animationPercent); 
				int animatingHeight = 0;

		if (animationDirection == INCOMING) { 
				animatingHeight =                    
				(int) (animationPercent * sheet.getHeight( )); 
			} else { 
				animatingHeight =
                    (int) ((1.0f - animationPercent) * sheet.getHeight( ));
			}
			// clip off that much from sheet and blit it 
			// into animatingSheet 
			animatingSheet.setAnimatingHeight (animatingHeight);
            animatingSheet.repaint( );

			if (animationPercent >= 1.0f) {
				stopAnimation( );
				if (animationDirection == INCOMING) {
				finishShowingSheet( );
				} else {
				glass.removeAll( );
				glass.setVisible(false);
				}
			}
		}
	}
    private void finishShowingSheet( ) {
		glass.removeAll( );
		GridBagConstraints gbc = new GridBagConstraints( );
		gbc.anchor = GridBagConstraints.NORTH;
		glass.add (sheet, gbc);
		gbc.gridy=1;
		gbc.weighty = Integer.MAX_VALUE;
		glass.add (Box.createGlue( ), gbc);
		glass.revalidate( );
		glass.repaint( );
	}
	// inner class AnimatedSheet goes here
   }

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

Light Box Effect (2 Windows, 1 Smaller And Active Above Inactive Grayed-Out Window) clusardi2k@aol.com - 2012-08-03 10:37 -0700
  Re: Light Box Effect (2 Windows, 1 Smaller And Active Above Inactive Grayed-Out Window) markspace <-@.> - 2012-08-03 11:37 -0700
    Re: Light Box Effect (2 Windows, 1 Smaller And Active Above Inactive Grayed-Out Window) clusardi2k@aol.com - 2012-08-06 08:54 -0700
      Re: Light Box Effect (2 Windows, 1 Smaller And Active Above Inactive Grayed-Out Window) markspace <-@.> - 2012-08-06 09:30 -0700
        Re: Light Box Effect (2 Windows, 1 Smaller And Active Above Inactive Grayed-Out Window) clusardi2k@aol.com - 2012-08-17 05:30 -0700
        Re: Light Box Effect (2 Windows, 1 Smaller And Active Above Inactive Grayed-Out Window) clusardi2k@aol.com - 2012-08-17 05:47 -0700

csiph-web