Comment rendre une fenêtre transparente ?![]()
Comment rendre une fenêtre transparente ?![]()
avec
tu as essayé?
Code : Sélectionner tout - Visualiser dans une fenêtre à part fen.setVisible(false);
Elle va devenir "invisible" pas transparente , non?Envoyé par relivio
![]()





Tu veux dire avec un effet de transparence c'est ca ?
transparente par rapport à la couleur alors? ça me paraît pas clair du tout. Donc invisible dans un sens elle est transparente car elle ne se voit pas mais reste présente.
Ca doit etre un truc comme ça je pense :
La javadoc :
Code : Sélectionner tout - Visualiser dans une fenêtre à part public void setOpaque(boolean isOpaque)
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JComponent.html#setOpaque(boolean)
Essaye de voir ça![]()
Transparente ça veut dire que si dans la fenêtre je place une image de petite dimension l'image est visible mais la partie inoccupée de la fenêtre laisse voir l'image de fond du bureau.
setVisible --> non
setOpaque --> ne marche pas.
Je suis sur que c'est bien setOpaque() qu'il faut que tu utilises (je connais quelqu'un qui devait faire des fenetres transparentes il a galéré avant de trouver ce qu'il fallait mettre, en l'occurence setOpaque).
L'inconvenient c'est qu'au debut ca marchait pas(comme toi) et il a dut faire une petite astuce pour arriver à ses fins... mais je ne sais plus exactement ce que c'est
![]()
Je crois me souvenir que tu dois mettre tous tes panel dans un panel principal lui aussi transparent... En fait t'auras deux premiers panels principaux de la meme taille imbriqué. Désolé mais je sais plus exactement ce que c'est la manip (il me semble juste que c'etait une histoire de panel imbriqué à la base de ta frame)
Désolé narfiggo mais le
directement sur une fenêtre ne marche pas. Je ne veux pas mettre un JPanel dans ma fenêtre mais travailler directement sur la fenêtre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 setOpaque(false)
Si on regarde l'API on s'aperçoit d'ailleurs que dans les méthodes héritées le setOpaque n'apparait pas.
Quelqu'un a t-il une idée:
Je cherche toujours une idée
j'ai essayé de récupérer le JRootPane de la fenêtre et de faire getRootPane().setOpaque(false) mais rien
j'ai essayé getContentPane().setVisible(false) mais rien
si quelqu'un a une idée
Effectivemment j'avais mal compris ce que tu demandais...![]()
Ce que j'ai dit c'est pour que tes fenetres soit transparentes au niveau interne de ton application, et toi tu veux pouvoir voir ton bureau au travers de ton programme si cette fois ci j'ai bien compris.
Et ça, je n'ai aucune idée si c'est faisable. J'ai regardé à droite à gauche pour voir si je pouvais trouver un truc dans ce genre mais non...
J'ai quand même de serieux doute sur la faisabilité de ton truc![]()
Bon courage quand même.
Bonjour,
Ce que tu demandes est faisable en utilisant JNI, car la transparence des fenêtres est gérée par l'OS.
Sinon, une astuce est d'utiliser la classe Robot et de faire une capture d'écran. Par exemple :
NB : cette astuce est satisfaisante pour un splash screen comme l'exemple, mais par pour une fenêtre complète. Il faudrait gerer les déplacement, redimensionnements, etc. La méthode la plus correcte serais d'utiliser JNI.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class TestTransparence extends JWindow{ private MonContentPane contentpane; private Robot robot; public TestTransparence(){ try{robot = new Robot();}catch(Exception e){e.printStackTrace();} contentpane = new MonContentPane(); setContentPane(contentpane); getContentPane().add(new JLabel(new ImageIcon("image.gif"))); pack();setLocationRelativeTo(null); createCapture();setVisible(true); try{Thread.sleep(5000);}catch(Exception e){e.printStackTrace();} System.exit(0); } private void createCapture(){ try{ Point point = new Point(0,0); SwingUtilities.convertPointToScreen(point,contentpane); setVisible(false); Image image = robot.createScreenCapture( new Rectangle(point,contentpane.getSize())); setVisible(true); MediaTracker mt = new MediaTracker(this); mt.addImage(image,0); mt.waitForAll(); contentpane.setImage(image); }catch(Exception e){e.printStackTrace();} } private class MonContentPane extends JPanel{ private Image image; public MonContentPane(){ super(); setOpaque(false); } public void setImage(Image capture){image=capture;repaint();} public void paintComponent(Graphics g){ super.paintComponent(g); if(image!=null)g.drawImage(image,0,0,this); } } public static void main(String[] args){new TestTransparence();} }
Bonne chance.
@+
Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
Merci de respecter les règles du club.
Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.
Merci Vedaer de ta réponse
mais ton code reste plutôt obscur 8)
Comment dois-je l'utiliser:
Salut,
Envoyé par c-top
Euh ben ... tu le compiles et tu lances
![]()
Il faut juste que "image.gif" soit une image avec un fond transparent.
C'est juste une fenêtre d'intro (de 5 secondes) comme tu en vois dans pas mal d'applications.
Le principe est simple. On crée un Container (ici la classe MonContentPane) sur lequel on affiche une image de fond. Cette image de fond est créée par la classe Robot et correspond à une capture d'écran. C'est ce qui donne l'impression de transparence.
Par contre, comme je le disais plus haut, ca va être plus difficile d'appliquer la même astuce pour une JFrame. Car, pour une JFrame il va falloir que tu gères le déplacement de la fenêtre, les redimensions, etc. (afin de créer une nouvelle image de fond). Sans parler de certains cas ou l'astuce ne conviens plus du tout (par exemple si une fenêtre surgis derrière l'application).
Les seules solutions valables que j'ai vu pour des JFrame ce sont des appels à JNI (utilisation de C pour faire appel à des ressources système).
@+
Les FAQs Java, J2EE, JDBC, Struts > Les cours > Le Forum Java.
Merci de respecter les règles du club.
Mon blog : quelques news sur Java, Linux et le monde de l'Open Source.
compiler et lancer ça j'avais fait mais rien ne se passe ou alors c'est tellement transparent qu'on y voit plus rien![]()
D'après la doc java une fenêtre c'est un JRootPane + LayeredPane + ContentPane + GlassPane(un transparent)
Si on éléimine le GlassPane puisqu'il est déjà transparent, qu'on rend invisible le ContentPane(setVisible(false)) et transparent le JRootPane + LayeredPane(setOpaque(false)) que reste-il:
Bon ne trouvant pas réponse je me suis directement adressé chez SUN eh oui j'ai osé mais ce problème me prenait vraiment trop de temps.
La réponse est NON, il n'est pas possible de réaliser une fenêtre transparente en java. La seule solution est celle donnée par vedaer(encore bravo)
Sinon il faut utiliser JNI... j'ai trouvé une solution en cpp. Mais bon le code n'est plus portable![]()
Encore merci à tous

sallam
voila la solution je les testé avec un JFrame et un JLabel ça marche
yourFrameHere.setBackground(newColor(0,0,0,0));
yourContentPanelHere.setOpaque(false);
la source est la : http://stackoverflow.com/questions/6...me-transparent
Partager