IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

Fenêtre transparente [FAQ]


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut Fenêtre transparente
    Comment rendre une fenêtre transparente ?

  2. #2
    Membre éprouvé Avatar de relivio
    Profil pro
    Inscrit en
    Février 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 157
    Par défaut
    avec
    tu as essayé?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 10
    Par défaut
    Citation Envoyé par relivio
    tu as essayé?
    Elle va devenir "invisible" pas transparente , non?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Avril 2004
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 6
    Par défaut
    Tu veux dire avec un effet de transparence c'est ca ?

  5. #5
    Membre éprouvé Avatar de relivio
    Profil pro
    Inscrit en
    Février 2004
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 157
    Par défaut
    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.

  6. #6
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    Ca doit etre un truc comme ça je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void setOpaque(boolean isOpaque)
    La javadoc :
    http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JComponent.html#setOpaque(boolean)

    Essaye de voir ça

  7. #7
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    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.

  8. #8
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    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)

  9. #9
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    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.
    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 :

  10. #10
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    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

  11. #11
    Membre expérimenté
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Par défaut
    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.

  12. #12
    Membre Expert
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Par défaut
    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 :
    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();}
    }
    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.
    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.

  13. #13
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    Merci Vedaer de ta réponse
    mais ton code reste plutôt obscur 8)
    Comment dois-je l'utiliser :

  14. #14
    Membre Expert
    Avatar de Ioan
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 737
    Par défaut
    Salut,
    Citation Envoyé par c-top
    Comment dois-je l'utiliser :
    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.

  15. #15
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    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 :

  16. #16
    Membre émérite
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Par défaut
    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

  17. #17
    Invité de passage
    Homme Profil pro
    développeur informatique & administrateur réseau, système et base de données
    Inscrit en
    Septembre 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : développeur informatique & administrateur réseau, système et base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une fenêtre transparente
    Par calving dans le forum Linux
    Réponses: 5
    Dernier message: 19/11/2008, 20h23
  2. Réponses: 6
    Dernier message: 18/03/2008, 21h55
  3. [Win32] Problème de fenêtre transparente et DirectX
    Par Reeter dans le forum Visual C++
    Réponses: 25
    Dernier message: 02/11/2006, 19h45
  4. Fenêtre transparente . . .
    Par lebesnec dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 25/10/2006, 18h24
  5. [GTK#] Fenêtre transparente ?
    Par nicolas.pied dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 15/05/2006, 23h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo