日期:2014-05-20  浏览次数:20679 次

请问大神,用Swing如何实现窗口背景颜色渐渐变淡,直到窗口消失?
想做一个类似QQ收到公告消息时弹出窗口的效果一样,窗口的背景色会渐渐变淡,直道消失为止。请问这个效果用Swing能做到吗?怎么做啊?

------解决方案--------------------
你主贴说的是变色,现在要求是透明,这个难度可是不一样啊。

给你段代码参考吧:
Java code

import javax.swing.*;
import com.sun.awt.AWTUtilities;

public class JFrameFadeOut extends JFrame {
    public JFrameFadeOut() {
        this.setSize(400, 300);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
        JFrameFadeOut wnd = new JFrameFadeOut();
        wnd.setVisible(true);
        new FadeOut(wnd).start();
    }
    static class FadeOut extends Thread {
        private JFrameFadeOut wnd;
        public FadeOut(JFrameFadeOut wnd) {
            this.wnd = wnd;
        }
        public void run() {
            try {
                for (int i = 100; i > 0; i--) {
                    Thread.sleep(100);
                    AWTUtilities.setWindowOpacity(wnd, i / 100f);
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            wnd.setVisible(false);
        }
    }
}

------解决方案--------------------
窗口渐淡这种效果,貌似要使用操作系统特定的API,在J2SE1.4, 1.5是不支持的。
AWTUtilities 这个类在com.sun.awt包中,官方不保证其向后兼容,不保证跨平台性,不保证稳定性.
J2SE 1.7 中透明效果已经被 Frame 的 setOpacity 方法代替,应该已经跨平台了.