SwingX对JXFrame的褪色效果?

时间:2011-11-22 23:30:49

标签: java swing swingx

我尝试了swingx框架的演示(http://swingx.java.net/)。当您关闭主窗口时,您会有很好的褪色效果。我试图用JXFrame达到这个效果,但它只有正常的关闭效果。

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

谢谢: - )

它与JXFrame无关(可以使用任何Window),只是绑定到窗口的opacity属性的时间轴。应用程序窗口关闭时,此时间轴开始,相关代码位于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中的所有帧,因为行为已更改为仅影响未修饰的窗口

修改

Timeline(和callbackAdapter)是Trident中的一个类,是Kirill的一个项目,不幸被他抛弃,被接管为非实体(没有参考方便,对不起) - 但你可以带任何其他的或手动编码一个Timer