void startAnimation(final boolean enlarge) { staticImage = myController.getStaticImage(); JPanel staticPanel = new JPanel() { @Override public void paint(Graphics g) { super.paint(g); if (staticImage != null) { Graphics2D g2d = (Graphics2D) g.create(); g2d.setBackground( new JBColor(new Color(255, 255, 255, 0), new Color(110, 110, 110, 0))); g2d.clearRect(0, 0, myController.SHEET_NC_WIDTH, myController.SHEET_NC_HEIGHT); g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.95f)); int multiplyFactor = staticImage.getWidth(null) / myController.SHEET_NC_WIDTH; g.drawImage( staticImage, 0, 0, myController.SHEET_NC_WIDTH, imageHeight, 0, staticImage.getHeight(null) - imageHeight * multiplyFactor, staticImage.getWidth(null), staticImage.getHeight(null), null); } } }; staticPanel.setOpaque(false); staticPanel.setSize(myController.SHEET_NC_WIDTH, myController.SHEET_NC_HEIGHT); myWindow.setContentPane(staticPanel); Animator myAnimator = new Animator( "Roll Down Sheet Animator", myController.SHEET_NC_HEIGHT, TIME_TO_SHOW_SHEET, false) { @Override public void paintNow(int frame, int totalFrames, int cycle) { setPositionRelativeToParent(); float percentage = (float) frame / (float) totalFrames; imageHeight = enlarge ? (int) (((float) myController.SHEET_NC_HEIGHT) * percentage) : (int) (myController.SHEET_NC_HEIGHT - percentage * myController.SHEET_HEIGHT); myWindow.repaint(); } @Override protected void paintCycleEnd() { setPositionRelativeToParent(); if (enlarge) { imageHeight = myController.SHEET_NC_HEIGHT; staticImage = null; myWindow.setContentPane(myController.getPanel(myWindow)); myController.requestFocus(); } else { if (restoreFullscreenButton) { FullScreenUtilities.setWindowCanFullScreen(myParent, true); } myWindow.dispose(); } } }; myAnimator.resume(); }