Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #17039 > unrolled thread
| Started by | clusardi2k@aol.com |
|---|---|
| First post | 2012-08-03 10:37 -0700 |
| Last post | 2012-08-17 05:47 -0700 |
| Articles | 6 — 2 participants |
Back to article view | Back to comp.lang.java.programmer
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
| From | clusardi2k@aol.com |
|---|---|
| Date | 2012-08-03 10:37 -0700 |
| Subject | Light 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]
| From | markspace <-@.> |
|---|---|
| Date | 2012-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]
| From | clusardi2k@aol.com |
|---|---|
| Date | 2012-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]
| From | markspace <-@.> |
|---|---|
| Date | 2012-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]
| From | clusardi2k@aol.com |
|---|---|
| Date | 2012-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]
| From | clusardi2k@aol.com |
|---|---|
| Date | 2012-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