2011-11-22 147 views
2

我尝试了swingx框架(http://swingx.java.net/)的演示。当你关闭主窗口时,你会有很好的消退效果。我试图用JXFrame达到这个效果,但它只有正常的关闭效果。对JXFrame的SwingX淡入淡出效果?

任何人有想法?

回答

1

感谢:-)

它不涉及到JXFrame(可以与任何窗口中进行),只需绑定到窗口的不透明度属性的时间表。当关闭应用程序窗口下面的时间表开始时,相关代码在DemoUtils

public static void fadeOutAndDispose(final Window window, 
     int fadeOutDuration) { 
    fadeOutAndEnd(window, fadeOutDuration, false); 
} 

public static void fadeOutAndExit(Window window, int fadeOutDuration) { 
    fadeOutAndEnd(window, fadeOutDuration, true); 
} 

private static void fadeOutAndEnd(final Window window, int fadeOutDuration, 
     final boolean exit) { 
    Timeline dispose = new Timeline(new WindowFader(window)); 
    dispose.addPropertyToInterpolate("opacity", 1.0f, 
      0.0f); 
    dispose.addCallback(new UIThreadTimelineCallbackAdapter() { 
     @Override 
     public void onTimelineStateChanged(TimelineState oldState, 
       TimelineState newState, float durationFraction, 
       float timelinePosition) { 
      if (newState == TimelineState.DONE) { 
       if (exit) { 
        Runtime.getRuntime().exit(0); 
       } else { 
        window.dispose(); 
       } 
      } 
     } 
    }); 
    dispose.setDuration(fadeOutDuration); 
    dispose.play(); 
} 

public static class WindowFader { 
    private Window window; 

    public WindowFader(Window window) { 
     this.window = window; 
    } 

    public void setOpacity(float opacity) { 
     AWTUtilitiesWrapper.setWindowOpacity(window, opacity); 
    } 
} 

注意,淡化效果将不再在JDK7所有帧工作,因为行为改变来实现只未装饰的窗口

编辑

时间轴(和callbackAdapter)是三叉戟,基里尔的项目,不幸被他抛弃,接管没有实质的一个(没有引用方便,不好意思)班 - 但你可以采取任何其他或手写代码一个定时器

+0

谢谢你,我试图在我的代码中实现,但错过了一些类,如Timeline和UIThreadTImelineCallbackAdapter ...有没有可能我错过了一个库? – Anthea