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 :

probleme avec la transparence


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut probleme avec la transparence
    Bonjour,

    J'ai une Jframe avec une image de fond.

    Dans cette jframe , un bouton permet d'afficher une JDialog.

    Cette JDialog à un fond blanc transparent qui permet d'apercevoir l'image de la jframe.

    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
     
    public class Apropos extends JDialog{
     
    public Apropos(){
     
    this.setUndecorated(true);
    this.setSize(400,140);
     
    this.getContentPane().setOpaque(false);
     
    //effet blanc transparent
    this.rootPane.setOpaque(true);
    this.rootPane.setBackground(new Color(255,255,255,150));
     
    ...
     
    }
     
     
    }
    Quand je ferme la jDialog et que je la rappelle avec le bouton dans la frame , alors la , la transparence ne ressemble plus a grand chose...

    Dans la transparence on voit aussi l'image de la "1ère" Jdialog.

    Merci de votre aide

  2. #2
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    c'est toujour comme ça avec la transparence .

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    t'as pas créé une frame transparente là, mais une fenetre qui ne se dessine pas. Ce que tu aura à la place, c'est la crasse qui traine en mémoire à cet endroit là. Pour faire une fenetre transparence, y a un post ici, mais c'est assez non garanti de fonctionner

    http://www.developpez.net/forums/d77...t/#post4493395

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    Comment supprimer cette crase qui est en mémoire ??

    t'as pas créé une frame transparente là, mais une fenetre qui ne se dessine pas
    La fenêtre qui se dessine pas ok -->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.setUndecorated(true);
    Mais je gère bien la transparence avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    this.getContentPane().setOpaque(false);
     
    //effet blanc transparent
    this.rootPane.setOpaque(true);
    this.rootPane.setBackground(new Color(255,255,255,150));
    Merci

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    pour supprimer cette "crasse" en mémoire, il faut dessiner sur la fenetre. donc retire ces setOpaque(false) sur le rootpane, car le rootpane d'une fenetre doit etre opaque en swing.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 919
    Billets dans le blog
    54
    Par défaut
    Mais il ne faut pas faire ainsi. Il faut, dans les JRE 1.6.0_10+, utiliser la classe com.sun.awt.AWTUtilities (voir le lien precedent mais voir aussi ce post http://www.developpez.net/forums/d79...e/#post4579158 car le code d'Adi dans le lien donne par tchize_ n'est pas portable)
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Citation Envoyé par bouye Voir le message
    car le code d'Adi dans le lien donne par tchize_ n'est pas portable)
    Il y a une correction plus bas par mes soins dans ce même thread http://www.developpez.net/forums/d77...t/#post4493972

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    Voila ce que j'ai réussi à faire :

    J'ai toujours ma Jframe Principale avec une image de fond. Dans cette Jframe il y a un menu avec notamment un bouton "A propos " qui affiche un popup transparent qui permet d'apercevoir l'image de la Jframe Principale

    Popup A propos :

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
    public class popup {
     
    	private JPanel jContentPane = null;
    	private JLabel logo = new JLabel(new ImageIcon(Version.PathImageLogoAPropos)); 
    	private JLabel message = new JLabel();
     
     
    	private JButton ok = new JButton("OK");
     
    	public popup(){
     
     for (AWTUtilities.Translucency translucency : AWTUtilities.Translucency.values()) {
     
     
     
                if (AWTUtilities.isTranslucencySupported(translucency)) {
     
                    final JFrame frame = new JFrame("Apropos "+translucency);
                    frame.setAlwaysOnTop(true);
     
                    frame.setBackground(Color.white);
                    frame.setLocation(400, 300);
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setSize(400,140);
                   frame.setUndecorated(true);
     
                            AWTUtilities.setWindowOpacity(frame, 0.5f);
     
     
                            this.jContentPane = new JPanel();
                            this.jContentPane.setLayout(null);
                            this.jContentPane.setOpaque(false);
     
     
                      this.message.setText("appli v0.4 BETA");
     
     
                    	ok.addActionListener(new java.awt.event.ActionListener() {
                    			public void actionPerformed(java.awt.event.ActionEvent e) {
                    				//System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
                    			     //setVisible(false);
                    			     frame.dispose();
                    			}
     
                    		});
     
                    			//jContentPane.add(titre);
                    			jContentPane.add(logo);
                    			jContentPane.add(message);
                    			jContentPane.add(message2);
                    			jContentPane.add(message3);
                    			jContentPane.add(ok);
     
                            frame.setContentPane(this.jContentPane);
     
                    frame.setVisible(true);
                }
            }
     
    	}
     
    }
    Ceci marche bien , le popup est bien transparent.

    Cependant mon code est il correct ??

    La création de la Jframe popup dans le for me gène un peu ???

    Merci pour vos réponses précédentes

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Il y a une correction plus bas par mes soins dans ce même thread http://www.developpez.net/forums/d77...t/#post4493972
    En effet selon le système le GraphicsConfiguration par défaut ne permet pas forcément d'utiliser tous les effets...

    Mais je pense que bouye ne parlais pas de cela : c'est surtout l'utilisation de la classe com.sun.awt.AWTUtilities qui n'est pas portable (comme toutes les classes des packages com.sun.* et sun.*), puisqu'elle n'est pas standard et qu'elle n'est présente que sur une partie des JVM...

    Il faudrait soit utiliser de la reflection, soit utiliser une classe-delegate selon le système...


    Au passage je prépare un billet blog là dessus



    Citation Envoyé par toma03 Voir le message
    Cependant mon code est il correct ??

    La création de la Jframe popup dans le for me gène un peu ???
    Mais pourquoi utilises-tu cette boucle ????

    Tout ce que tu devrais faire, c'est quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (AWTUtilities.isTranslucencySupported(Translucency.TRANSLUCENT)) {
        AWTUtilities.setWindowOpacity(frame, 0.5f);
    }
    (en prenant en compte les remarques ci-dessus quand à la portabilité)


    a++

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    Effectivement , j'ai supprimer la boucle comme tu me l'as indiqué.

    Concernant la portabilité , comment je peux faire pour : utiliser la transparence uniquement si AWTUtilities est presente , si ce n'est pas le cas , alors le popup est standard (non transparent).

    D'autant plus que mon application est multiplatforme.

    Merci beaucoup

  11. #11
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 919
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Mais je pense que bouye ne parlais pas de cela : c'est surtout l'utilisation de la classe com.sun.awt.AWTUtilities qui n'est pas portable (comme toutes les classes des packages com.sun.* et sun.*), puisqu'elle n'est pas standard et qu'elle n'est présente que sur une partie des JVM...


    Il faudrait soit utiliser de la reflection, soit utiliser une classe-delegate selon le système...
    Exact, com.sun.awt.AWTUtilities étant référencée dans le code, la classe ne se chargera pas sur les JVM où elle n'existe pas. Voir ce que j'ai écris dans le lien que j'ai donné pour une implémentation utilisant la réflection, mais même cela ne fonctionnera pas correctement sur Java 7 sans modif puisque tout a été déplacé dans la classe Window comme tu nous le disais tantôt.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  12. #12
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par toma03 Voir le message
    Concernant la portabilité , comment je peux faire pour : utiliser la transparence uniquement si AWTUtilities est presente , si ce n'est pas le cas , alors le popup est standard (non transparent).
    Tu peux utiliser le code de bouye qui a réécrit une classe AWTUtilities qui appelle la vrai par reflection si elle existe : http://www.developpez.net/forums/d79...e/#post4579158


    Sinon quand je l'aurais fini je posterais ici mon billet blog avec une API similaire qui gèrera également Java 7...

    a++

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    il n'est pas obligatoire de passer par réflection. Il est préférable, je pense, d'écrire une interface "GestionDeFenetreTransparente" avec 3 implémentations. Une utilisant com.xxx sans reflection, une ne gérant pas la transparent et une utilisant les classes de java 7. Ensuite tu instancie celle qu'il te faut, suivant la version de la jvm présente.

  14. #14
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    il n'est pas obligatoire de passer par réflection. Il est préférable, je pense, d'écrire une interface "GestionDeFenetreTransparente" avec 3 implémentations. Une utilisant com.xxx sans reflection, une ne gérant pas la transparent et une utilisant les classes de sun. Ensuite tu instancie celle qu'il te faut, suivant la version de la jvm présente.
    Si tu ne gères que AWTUtilities (comme bouye) la reflection est le plus simple à mettre en place.

    Par contre si tu gère plusieurs implémentation il vaut mieux en effet utiliser plusieurs classes avec des appels directs en faisant attention à la manière dont le code est compilé

    a++

  15. #15
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 919
    Billets dans le blog
    54
    Par défaut
    Yep les deux solutions se valent.

    Créer plusieurs implémentations c'est plus flexible et plus lisible aussi par contre ca peut être pénible à maintenir.

    La réflection... ben c'est la réflection, il faut exécuter pour savoir si ça crash ou pas, au moindre changement/modif de l'API pas publié ça ne fonctionne plus.

    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  16. #16
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    ca me permet surtout de me passer de la reflection en mettant finalement toute le code "pouvant foirer" au sein d'une classe qui n'est instanciée que si la jvm est la bonne. Ainsi je bénéficie de toute l'aide de l'ide. Bon l'inconvénient c'est que pour compiler j'aurais besoin de la dernière java 6.

    edit: et en y réfléchissant, ce sera difficile de compiler à la fois avec les dernier jdk 6 *et* avec la java 7 quand elle sera sortie, ce qui obligera à splitter le projet en deux, ce qui est finalement une connerie de ma part

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    Je suis un peu perdu avec tous ça

    Utiliser la reflection me semble, si j'ai bien compris, moins fiable (selon la version et/ou l'os, modif de l'api) .

    Je m'orienterai donc plus sur la methode avec plusieurs implémentations.

    Je veux vraiment faire quelque chose de simple :

    si on peux gérer la transparence --> Ok , sinon tanpis --> popup non transparent.

    Si vous avez des pistes de code , je suis preneur car là je suis complètement largué...

    Merci de votre réactivité sur ce topic.

    Ps : Compte tenu du dernier post , je suis encore plus dans le flou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    edit: et en y réfléchissant, ce sera difficile de compiler à la fois avec les dernier jdk 6 *et* avec la java 7 quand elle sera sortie, ce qui obligera à splitter le projet en deux, ce qui est finalement une connerie de ma part

  18. #18
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 919
    Billets dans le blog
    54
    Par défaut
    Comme dans la vie réelle, tout n'est jamais ni noir ni blanc et il est fort possible que tu finisses en faisant un mix des deux
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  19. #19
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    moralité:
    fait des fenetres opaque

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 215
    Par défaut
    J'ai bien l'impression oui ...

    Merci comme même

Discussions similaires

  1. Probleme avec drawstring sur fond transparent
    Par kakrocq dans le forum Framework .NET
    Réponses: 5
    Dernier message: 23/05/2008, 23h00
  2. probleme avec les exposions et transparence ?
    Par ilimo dans le forum DirectX
    Réponses: 11
    Dernier message: 29/05/2004, 00h24
  3. Probleme avec la transparence
    Par CookSlash dans le forum OpenGL
    Réponses: 12
    Dernier message: 15/01/2004, 22h35
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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