【发布时间】:2010-10-31 15:52:37
【问题描述】:
所以我试图在透明窗口上绘制一个实心红色椭圆。后来我想用多个形状做一些更复杂的事情,所以使用 setWindowShape 不是我想要的。这是我目前使用的代码:
import java.awt.*;
import javax.swing.*;
public class JavaDock extends JFrame{
public JavaDock(){
super("This is a test");
setSize(400, 150);
setUndecorated(true);
getContentPane().setLayout(new FlowLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel()
{
public void paintComponent(Graphics g)
{
Graphics2D g2d = (Graphics2D) g.create();
g2d.setComposite(AlphaComposite.Clear);
g.setColor(Color.red);
//Draw an oval in the panel
g.fillOval(10, 10, getWidth() - 20, getHeight() - 20);
}
};
panel.setOpaque(false);
setGlassPane(panel);
getGlassPane().setVisible(true);
com.sun.awt.AWTUtilities.setWindowOpacity(this, 0.5f);
setVisible(true);
}
protected void paintComponent(Graphics g) {
}
public static void main(String[] args){
JavaDock jd = new JavaDock();
}
}
【问题讨论】:
-
我不确定我是否理解这个问题。我看到了红色的椭圆形。我无法访问 AWTUtilities,所以也许这就是区别。
-
确实如此。窗口应该是透明的,但椭圆必须是不透明的。
-
+1:我也问过。并且仍在寻找一个好的解决方案。 stackoverflow.com/questions/3372016/…
标签: java swing graphics transparency