所以我试图在透明窗口上画出一个坚实的红色椭圆形。我后来想要做一些更复杂的多种形状,所以使用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();
}
}
答案 0 :(得分:4)
您正在向窗口应用全局透明度,因此其中的所有内容自然至少与全局值一样透明。你可能想要每像素半透明。取代
com.sun.awt.AWTUtilities.setWindowOpacity(this, 0.5f);
带
com.sun.awt.AWTUtilities.setWindowOpaque(this, false);
这样只留下你的椭圆形,它将是完全不透明的。可以找到更多信息in this Tutorial
答案 1 :(得分:0)
Graphics2D g2d = (Graphics2D) g.create();
g2d.setComposite(AlphaComposite.Clear);
g.setColor(Color.red);
g.fillOval(10, 10, getWidth() - 20, getHeight() - 20);
代码看起来不太对劲。我会尝试:
Graphics2D g2d = (Graphics2D)g;
g2d.setComposite(AlphaComposite.Clear);
g2d.setColor(Color.red);
g2d.fillOval(10, 10, getWidth() - 20, getHeight() - 20);
或只是使用:
g.setColor(Color.red);
g.fillOval(10, 10, getWidth() - 20, getHeight() - 20);