J'essaie donc de dessiner un ovale rouge uni sur une fenêtre transparente. Plus tard, je veux faire quelque chose de plus complexe avec plusieurs formes, donc utiliser setWindowShape n'est pas ce que je cherche. Voici le code que je utilise jusqu'à présent:Dessiner un contenu non transparent sur une fenêtre transparente
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();
}
}
Je ne suis pas sûr de comprendre la question. Je vois l'ovale rouge. Je n'ai pas accès à AWTUtilities alors peut-être que c'est la différence. – camickr
En effet, c'est. la fenêtre est supposée être transparente, mais l'ovale doit être non transparent. – William
+1: Je l'ai demandé aussi. Et toujours à la recherche d'une bonne solution. http://stackoverflow.com/questions/3372016/java-transparent-windows-with-non-transparent-components –