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


Groups > comp.lang.java.programmer > #17039 > unrolled thread

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

Started byclusardi2k@aol.com
First post2012-08-03 10:37 -0700
Last post2012-08-17 05:47 -0700
Articles 6 — 2 participants

Back to article view | Back to comp.lang.java.programmer


Contents

  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

#17039 — Light Box Effect (2 Windows, 1 Smaller And Active Above Inactive Grayed-Out Window)

Fromclusardi2k@aol.com
Date2012-08-03 10:37 -0700
SubjectLight Box Effect (2 Windows, 1 Smaller And Active Above Inactive Grayed-Out Window)
Message-ID<0456a851-4fa4-4a8e-9a98-86d6e99b5aab@googlegroups.com>
Does anybody have a project that will give me a Light Box effect to a project.

A Light Box Effect produces two windows. One window will be active, but the one below it will be inactive and grayed out.

Here's an image of what I want to achieve.
 
http://stackoverflow.com/questions/6605964/lightbox-effect-in-swing

I'm not interested in licensed code.

Thank you,

[toc] | [next] | [standalone]


#17040

Frommarkspace <-@.>
Date2012-08-03 11:37 -0700
Message-ID<jvh5pv$m92$1@dont-email.me>
In reply to#17039
On 8/3/2012 10:37 AM, clusardi2k@aol.com wrote:
> Does anybody have a project that will give me a Light Box effect to a
> project.
>
> A Light Box Effect produces two windows. One window will be active,
> but the one below it will be inactive and grayed out.
>
> Here's an image of what I want to achieve.
>
> http://stackoverflow.com/questions/6605964/lightbox-effect-in-swing


There's a class JLayer which provides the basics.  You'll have to 
provide a fair amount of code though;  I'm not aware of any class that 
provides a lightbox feature.

There's also a book call Swing Hacks which has some interesting ideas, 
including an animated window similar to what you are asking for.  Still 
not exactly a lightbox however.

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

[toc] | [prev] | [next] | [standalone]


#17245

Fromclusardi2k@aol.com
Date2012-08-06 08:54 -0700
Message-ID<4bc0bc90-c6b8-49fb-98b5-a5c5925be3f9@googlegroups.com>
In reply to#17040
Is there another way besides using JLayer. Is JLayer the best way.

Thank you,

[toc] | [prev] | [next] | [standalone]


#17246

Frommarkspace <-@.>
Date2012-08-06 09:30 -0700
Message-ID<jvorfb$q84$1@dont-email.me>
In reply to#17245
On 8/6/2012 8:54 AM, clusardi2k@aol.com wrote:
> Is there another way besides using JLayer. Is JLayer the best way.


I think it might be the only way, short of doing it yourself like that 
Swing Hacks books shows you.  "Best" is a hard thing to determine 
without careful analysis.  But JLayer is certainly the way I would 
start, even if I decided later I had to change.  Can't go too badly 
wrong re-using code someone else already wrote.


[toc] | [prev] | [next] | [standalone]


#17946

Fromclusardi2k@aol.com
Date2012-08-17 05:30 -0700
Message-ID<641c4ae7-c632-40e5-acb8-9da82a43d8b3@googlegroups.com>
In reply to#17246
The book is here:

http://www.scribd.com/doc/15490884/Swing-Hacks-Tips-and-Tools-for-Killer-GUIs

[toc] | [prev] | [next] | [standalone]


#17947

Fromclusardi2k@aol.com
Date2012-08-17 05:47 -0700
Message-ID<ce05b2e5-79e0-43ab-a4db-0a29b44dae27@googlegroups.com>
In reply to#17246
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
   }

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.java.programmer


csiph-web