在JDK8中,甲骨文删除了AWTUtilites这个类,这让很多以前透明化窗体的方法失效,但它实际上是有替代的。

透明背景色

JWindow.setBackground(new Color(255,255,255,0));

这样即可将JWindow透明化。
它的实际原理就是把JWindow的背景色改为alpha为0的透明背景。从而实现透明。
但这个方法不可用于JFrame。因为JFrame在绘制窗体边框的时候,会使用不透明的背景色(Swing主题的颜色)。这个貌似不能修改(写死了)。
如果要透明一个JFrame窗体,先要:

JFrame.setUndecorated(true);

来关闭边框,然后才能设置透明背景色。

保留边框的透明背景

这里吾总结出两个方案:

1.使用已经实现的第三方Swing主题

这里推荐:BeautyEye
BeautyEye算是Swing主题包里面唯一一个实现了这个功能的。
ps:它现在不支持jdk8以上的jdk
使用它很简单:
1.导入jar包
2.启用Swing主题

BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.translucencySmallShadow;
org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();

2.手 动 绘 制

对,就是人工在去除边框并透明的JFrame上手动绘制边框。

Q.E.D.


在校大学生一名 熟悉java/cpp
正在摸索JavaFX ing......