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

AWT/Swing Java Discussion :

GlassPane qui ne recouvre pas tous les composants ?


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut GlassPane qui ne recouvre pas tous les composants ?
    J'ai un soucis avec mon glassPane.

    J'ai donc fait un glassPane qui sert uniquement à faire des transition entre mes onglets donc je ne l'affiche pas dès le début, ou plutôt je l'affiche mais transparent.

    quand je change d'onglet je l'affiche progressivement puis le fait disparaître pour faire une petite animation.

    Bref, tout ça ça fonctionne bien.

    Mon glassPane ne recouvre pas toute la surface de la fenêtre. Il laisse apparaître la barre des onglets.

    J'ai remarqué pendant mes animations qu'il y avait des clignotements, j'utilise le même glassPane pour une autre fenêtre mais il recouvre toute la surface et tout va bien.

    Tout ces explications pas très claires pour un problème:

    glassPane transparent : OK



    GlassPane affiché: Pas Ok



    en orange c'est la zone où est sensée s'afficher le glassPane.

    Le code de mon glassPane:
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    public class FadePanel extends JComponent {
     
        private float trans = 0.0f;
        private int h = 0;
        private int w = 0;
     
        public FadePanel() {
            setBackground(new Color(238, 238, 238));
        }
     
        public FadePanel(int w, int h) {
            this.h = h;
            this.w = w;
            setBackground(new Color(238, 238, 238));
        }
     
        public void fadeIn() {
     
            try {
     
                float f = 1.0f;
                while (f > 0.1f) {
                    trans = f;
                    f -= 0.2f;
                    repaint();
     
                    Thread.sleep(20);
     
                }
                trans = 0.0f;
                repaint();
            } catch (InterruptedException ex) {
                Logger.getLogger(FadePanel.class.getName()).log(Level.SEVERE, null, ex);
            }
     
     
        }
     
        public void fadeOut() {
     
     
     
            try {
     
     
                float f = 0.0f;
                while (f < 0.9f) {
     
                    trans = f;
                    f += 0.2f;
                    repaint();
                    Thread.sleep(20);
     
                }
                trans = 1.0f;
                repaint();
     
            } catch (InterruptedException ex) {
                Logger.getLogger(FadePanel.class.getName()).log(Level.SEVERE, null, ex);
            }
     
     
        }
     
        @Override
        public void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D) g;
            Rectangle clip = g.getClipBounds();
     
            // sets a 65% translucent composite
            AlphaComposite alpha = AlphaComposite.SrcOver.derive(trans);
            g2.setComposite(alpha);
     
            // fills the background
            g2.setColor(getBackground());
            g2.fillRect(clip.x + w, clip.y + h, clip.width - w, clip.height - h);
        }
    }
    Merci d'avance, je bloque la

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Je m'auto répond.

    Voila si je change l'offset pour un truc un peu plus petit en hauteur (10px) et j'en ajoute un en largeur (100px) à ma classe FadePane (attributs w et h)

    J'obtiens ça


    Il applique l'offset aux JLabel et JTextField
    Si je redimensionne la fenêtre ça disparaît puis réapparait de temps en temps.



    une idée ?

  3. #3
    Membre actif Avatar de uhrand
    Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2009
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 203
    Points : 275
    Points
    275
    Par défaut
    Une animation doit tourner dans un thread d'arrière plan, facile à réaliser avec un javax.swing.Timer. Voici un exemple qui fonctionne: http://www.java-forum.org/attachment...gpaneldemo.jar (code source dans le jar).

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Le problème c'est que même quand j'affiche simplement le glassPane sans animation, il s'affiche de cette façon

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Ok, problème résolu, cela venait de ma methode paintComponents

    Le getclipBounds foirait…

    J'utilise donc this.getHeight() et this.getWidth(); et tout roule

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par Lamarios Voir le message

    Le getclipBounds foirait…
    C'est pas qu'elle foirait. C'est juste qu'elle n'est absolument pas prévue pour renvoyer la taille du composant à la base. Mais plutôt de limiter le repaint d'un composant à un rectangle spécifique. Cf javadoc.

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Oui, je me suis mal exprimé. Je n'ai rien contre le getClipBounds mais c'est juste que c'était pas adapté à ce dont j'avais besoin.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/07/2013, 09h00
  2. Réponses: 4
    Dernier message: 01/03/2011, 12h00
  3. Réponses: 3
    Dernier message: 18/11/2008, 15h31
  4. Tous les composants ne s'affichent pas dans un JPanel
    Par julie4207 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/06/2008, 11h24
  5. Réponses: 2
    Dernier message: 25/09/2006, 13h04

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