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 :

JFrame transparente, suite.


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut JFrame transparente, suite.
    Je reprends ce thread qui abordait le déjà le sujet mais qui est marqué comme Résolu.


    Au contraire à ce que rootel77 y disait, je trouve que le résultat avec Robot est plutôt convainquant.

    Je me suis inspiré pour du lien fournit par GETah pour mettre un fond transparent à ma JFrame.

    Là où je bloque, c'est que je n'arrive pas à peindre mes objets (bouton, ...) à moins de perdre mon fond transparent.

    Voici mon code:
    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
        /**
         * Redessin de l'écran
         * @param g Graphics
         */
        public void paint(Graphics g) {
            if (fond != null) {
                g.drawImage(fond, 0, 0, null);
            }
            // :-( fait disparaître l'image "fond", mais sans ça impossible de voir mon bouton !!!
            super.paint(g);
        }
     
     
        /** 
         * Construction du fond
         */
        private void BuildFond() {
            Rectangle r = this.getBounds();
     
            // Capture du fond
            fond = new BufferedImage(W, H, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2 = (Graphics2D) fond.getGraphics();
     
            try {
                Robot robot = new Robot(getGraphicsConfiguration().getDevice());
                BufferedImage capture = robot.createScreenCapture(r);
                g2.drawImage(capture, null, 0, 0);
            } catch (AWTException e) {}
     
            // La couche orange transaparente
            g2.setColor(new Color(0.95F, 0.5F, 0F, 0.65F));
            g2.fillRoundRect(0, 0, W, H, 0, 0);
        }
    BuildFond est appellé à la construction.
    J'ai essayé d'ajouter un getRootPane().setOpaque(false) mais ça n'a servi à rien.

    D'autres idées, conseils ?

    Merci,

    Laurent

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Il y a beaucoup, beaucoup mieux que Robot. Va voir mes explications ici : http://www.curious-creature.org/2007...s-on-mac-os-x/

    (Et j'en sais quelque chose, j'ai écrit l'article sur JavaLobby que tu as dû lire depuis l'autre thread).
    Romain Guy
    Android - Mon livre - Mon blog

  3. #3
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut
    Merci pour cette suggestion, mais je n'y arrive pas trop !
    Je reçois un "Window alpha not supported" dans mon System.err
    Je bosse sur Windows XP. D'après ton exemple cela devrait fonctionner !

    Remarque: tout le bla-bla de la page https://jna.dev.java.net/ sur How To Get Started Using JNA, je n'ai pas fait, car ça ne me disait pas grand chose.
    Je me suis contenté d'ajouter dans mon path jna.jar et jna_examples.jar

  4. #4
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut JNA met dit "Window alpha not supported"
    J'ai investigué un peu, mais la manière de mettre en œuvre ce JNA n'est pas très claire !

    Mon code est simplissime.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import com.sun.jna.examples.*;
    Si je fais dans mon main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ShapedWindowDemo o=new ShapedWindowDemo();
    o.main(new String[0]);
    j'obtiens l'horloge avec fond transparent.

    Par contre si j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    JFrame frame = new SelectionWindow();
    frame.setVisible(true);
    if (WindowUtils.isWindowAlphaSupported())
      WindowUtils.setWindowAlpha(frame, 0.5f);
      else WindowUtils.setWindowTransparent(frame,true);
    Je reçois un "Window alpha not supported".

    Ma fenêtre n'est en rien transparente !!
    Que font-ils de plus dans cette ShapdeWindowDemo ???

  5. #5
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut
    J'y suis arrivé tout seul comme un grand, mais, merde, c'est mal documenté

    J'ai ajouté tout en haut de mon code un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    try {
       System.setProperty("sun.java2d.noddraw", "true");
    } catch (Exception e) {
    }
    Aucune idée de ce que ça fait, mais ça marche.

    Remarque: Il faut absolument mettre qqch sur sa frame, sinon elle n'apparaîtra pas.

  6. #6
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par lvr Voir le message
    J'y suis arrivé tout seul comme un grand, mais, merde, c'est mal documenté
    Le projet n'est pas arrivé à son terme, et dans la section "Development Task" on peut lire ceci (entre autres) :
    The library works fairly well now, but there are a number of tasks with which we'd appreciate help:

    • More comprehensive documentation on using JNA, including examples of Java to native conversions of data types, function usage, and proper memory management.
    a++

  7. #7
    lvr
    lvr est déconnecté
    Membre extrêmement actif Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    909
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 909
    Points : 1 360
    Points
    1 360
    Par défaut
    C'est donc ça

    Par contre ce que je trouve étrange, c'est le découpage en package: la class WindowUtils ne devrait pas se trouver dans examples, mais directement dans le paquet du dessus ou dans un paquet à côté, genre jna.utils !

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

Discussions similaires

  1. MouseListener/JFrame : plusieurs fenetres s'ouvrent suite à un seul click
    Par BunnyFly dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 29/07/2011, 11h15
  2. JFrame Transparente Erreur
    Par vinci.novice dans le forum Débuter
    Réponses: 4
    Dernier message: 16/08/2010, 15h59
  3. Jframe : Problème de "superposition" image de fond / bouton SUITE
    Par NicolasGuyomar dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 18/03/2007, 13h06
  4. Créer une JFrame ou JWindow transparente.
    Par keny dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 08/07/2005, 17h16
  5. Pb BDE suite a passage en Windows 2000 pro
    Par ARIF dans le forum Paradox
    Réponses: 4
    Dernier message: 18/11/2002, 11h39

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