我尝试了swingx框架(http://swingx.java.net/)的演示。当你关闭主窗口时,你有一个很好的淡入淡出效果。我试着用JXFrame来达到这个效果,但它只有正常的关闭效果。
有谁有主意吗?
发布于 2011-11-23 18:00:28
谢谢:-)
它与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中的所有帧,因为行为已更改为仅影响未装饰的窗口
编辑
Timeline (和callbackAdapter)是三叉树中的类,这是基里尔的一个项目,不幸的是被他抛弃了,被认为是无关紧要的(手头没有参考资料,对不起)--但你可以采用任何其他的或手工编写一个计时器
https://stackoverflow.com/questions/8235411
复制相似问题