请问大神,用Swing如何实现窗口背景颜色渐渐变淡,直到窗口消失? 想做一个类似QQ收到公告消息时弹出窗口的效果一样,窗口的背景色会渐渐变淡,直道消失为止。请问这个效果用Swing能做到吗?怎么做啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一:要求是背景渐渐变浅,所以这个间隔时间要设置成多少呢?10毫秒改变一次么?—— 应给根据你的需求而定,如果你打算 5秒内完成变色,每次改变 10% 的亮度;—— 那么就是 5s÷10 = 500ms第二:背景颜色怎么控制,比如一开始窗口弹出时是红色的,然胡每次改变颜色时这个颜色要怎么设置呢?比如我怎么知道比红色再浅一点的颜色是什么颜色?然后比这个颜色再浅一点的是什么颜色呢?—— 预先设置好初始色 和 结束色,然后每次取出其RGB值进行计算,无非就是:—— red = beginRed(初始红色) + times(迭代次数) * (endRed - beginRed) / total(总次数); ldh911大哥,还有一个问题,有没有什么窗口,是不带蓝颜色标题栏的,只有一个窗口体。 JFrame.setDefaultLookAndFeelDecorated(false); 这句试了,好像没有效果啊:public static void main(String args[]){ JFrame.setDefaultLookAndFeelDecorated(false); JFrame jf = new JFrame(); jf.setSize(200,200); jf.getContentPane().setBackground(Color.grey); jf.setVisible(true);}弹出来的窗体还是带蓝色的边框。 不好意思,弄错了: this.setUndecorated(true); java7就可以实现 public void paint(Graphics g, JComponent c) { super.paint(g, c); Graphics2D g2 = (Graphics2D) g.create(); int w = c.getWidth(); int h = c.getHeight(); g2.setComposite(AlphaComposite.getInstance( AlphaComposite.SRC_ATOP, .5f)); g2.setPaint(new GradientPaint(12, 12, Color.yellow, 12, h, Color.red)); g2.fillRect(0, 0, w, h); g2.dispose(); } ldh911大哥,这个方法没看明白,能不能详解一下?有什么方法可以直接拿到当前Frame的透明度,然后直接定时改变透明度,一直到全透明,不知这条路可行不? 你主贴说的是变色,现在要求是透明,这个难度可是不一样啊。给你段代码参考吧: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); } }}另一种做法是,启动之前先截图,然后利用重绘桌面截图来实现 透明 效果。 在我这边执行会抛异常,IlltegalComponentStateExceptioin 是在AWTUtilities.setWindowOpacity(wnd, i / 100f);这句抛出的。更改透明度是不是只有用AWTUtilities这一种方式呢? 直接更改透明度,基本上只有 AWTUtilities 的方式。我这边测试是正常的,我是 JDK1.6。另外还有中方式就是用Eclipse的SWT的图形界面,但就完全不是Swing这套了。 窗口渐淡这种效果,貌似要使用操作系统特定的API,在J2SE1.4, 1.5是不支持的。AWTUtilities 这个类在com.sun.awt包中,官方不保证其向后兼容,不保证跨平台性,不保证稳定性.J2SE 1.7 中透明效果已经被 Frame 的 setOpacity 方法代替,应该已经跨平台了. byte[]数组与String转换 请教一个反话费的数据库问题 SWT中弹出的对话筐居中弹出 程序运行时。输入数据方式问题。 求大哥帮忙??????? 一个URL参数显示中文乱码问题,请高手指教 请问如何把从pl/sql中读出的OracleTypes.DATE型数据转换成String型“yyyy/MM/dd HH:mm” 学好JAVA是不是不用懂数据结构,没有分了,请帮忙指点一下 请教:如何用简单的方式将某个指定目录下的几十个jar文件在CLASSPATH变量中注册?(50) 正则表达式入门问题 java编程思想 中的一段代码 关于加密(为什么同样的明文加密之后密文会不一样)
—— 应给根据你的需求而定,如果你打算 5秒内完成变色,每次改变 10% 的亮度;
—— 那么就是 5s÷10 = 500ms第二:背景颜色怎么控制,比如一开始窗口弹出时是红色的,然胡每次改变颜色时这个颜色要怎么设置呢?比如我怎么知道比红色再浅一点的颜色是什么颜色?然后比这个颜色再浅一点的是什么颜色呢?
—— 预先设置好初始色 和 结束色,然后每次取出其RGB值进行计算,无非就是:
—— red = beginRed(初始红色) + times(迭代次数) * (endRed - beginRed) / total(总次数);
JFrame.setDefaultLookAndFeelDecorated(false);
public static void main(String args[]){
JFrame.setDefaultLookAndFeelDecorated(false);
JFrame jf = new JFrame();
jf.setSize(200,200);
jf.getContentPane().setBackground(Color.grey);
jf.setVisible(true);
}
弹出来的窗体还是带蓝色的边框。
this.setUndecorated(true);
public void paint(Graphics g, JComponent c) {
super.paint(g, c); Graphics2D g2 = (Graphics2D) g.create(); int w = c.getWidth();
int h = c.getHeight();
g2.setComposite(AlphaComposite.getInstance(
AlphaComposite.SRC_ATOP, .5f));
g2.setPaint(new GradientPaint(12, 12, Color.yellow, 12, h, Color.red));
g2.fillRect(0, 0, w, h); g2.dispose();
}
有什么方法可以直接拿到当前Frame的透明度,然后直接定时改变透明度,一直到全透明,不知这条路可行不?
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);
}
}
}另一种做法是,启动之前先截图,然后利用重绘桌面截图来实现 透明 效果。
更改透明度是不是只有用AWTUtilities这一种方式呢?
我这边测试是正常的,我是 JDK1.6。另外还有中方式就是用Eclipse的SWT的图形界面,但就完全不是Swing这套了。
AWTUtilities 这个类在com.sun.awt包中,官方不保证其向后兼容,不保证跨平台性,不保证稳定性.
J2SE 1.7 中透明效果已经被 Frame 的 setOpacity 方法代替,应该已经跨平台了.