FileDocCategorySizeDatePackage
AniSheetableJFrame.javaAPI DocExample5616Mon Jan 09 11:02:00 GMT 2006None

AniSheetableJFrame

public class AniSheetableJFrame extends JFrame implements ActionListener

Fields Summary
public static final int
INCOMING
public static final int
OUTGOING
public static final float
ANIMATION_DURATION
public static final int
ANIMATION_SLEEP
JComponent
sheet
JPanel
glass
AnimatingSheet
animatingSheet
boolean
animating
int
animationDirection
Timer
animationTimer
long
animationStart
BufferedImage
offscreenImage
Constructors Summary
public AniSheetableJFrame(String name)


        
        super(name);
        glass = (JPanel) getGlassPane();
        glass.setLayout (new GridBagLayout());
        animatingSheet = new AnimatingSheet();
        animatingSheet.setBorder (new LineBorder(Color.black, 1));
    
Methods Summary
public voidactionPerformed(java.awt.event.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 voidfinishShowingSheet()

        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.setVisible(true);
        glass.revalidate();
        glass.repaint();
    
public voidhideSheet()

        animationDirection = OUTGOING;
        startAnimation();
        // glass.setVisible(false);
    
public javax.swing.JComponentshowJDialogAsSheet(javax.swing.JDialog dialog)

        sheet = (JComponent) dialog.getContentPane();
        sheet.setBorder (new LineBorder(Color.black, 1));
        glass.removeAll();
        animationDirection = INCOMING;
        startAnimation();
        return sheet;
    
private voidstartAnimation()

        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 voidstopAnimation()

        animationTimer.stop();
        animating = false;