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 :

Récupérer image fond jpanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de scorbo
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 176
    Par défaut Récupérer image fond jpanel
    Bonjour,

    J'ai récupérer une classe étendant JPanel qui permet d'afficher le spectre d'une musique (cette classe provient du projet Jlayer). On l'appelera JPanelSpectrum. J'ai créer une JPanel avec une image en fond et à un endroit j'utilise JPanelSptectrum pour afficher le spectre. Le problème c'est que j'aimerai que ce JPanel soit transparent pour laisser apparaitre l'image du premier JPanel.
    Mon problème c'est que la classe utilise une VolatileImage qui est créer une seul fois puis utilisé tout au long de l'exécution. Bref ce que j'aimerais c'est initialisé cette VolatileImage avec la partie de l'image de fond du premier JPanel que la classe JPanelSpectrum recouvre.

    Voici les morceaux de code intéressant:
    Code de JPanelSpectrum
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private synchronized Image getDoubleBuffer()
        {
            if (bi == null || (bi.getWidth(null) != getSize().width || bi.getHeight(null) != getSize().height))
            {
                width = getSize().width;
                height = getSize().height;
                height_2 = height >> 1;
                computeColorScale();
                bi = getGraphicsConfiguration().createCompatibleVolatileImage(width, height);
            }
            return bi;
        }
    Quand on veut afficher un spectre on appelle la méthode process. Celle récupère la VolatileImage, l'efface avec fillRect et y dessine se qui va bien puis dessine le tout sur le JPanel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Graphics wGrp = getDoubleBuffer().getGraphics();
            wGrp.setColor(getBackground());
            wGrp.fillRect(0, 0, getSize().width, getSize().height);
            ...
            if (getGraphics() != null) getGraphics().drawImage(getDoubleBuffer(), 0, 0, null);
    Donc ce que j'aimerai, c'est éviter la partie wGrp.fillRect(... et la remplacer par la partie de l'image du premier JPanel.

    J'ai trouvé un post sur ce forum qui parlait de comment faire une sauvegarde de l'image de fond d'un JPanel, mais c'était en dehors de ce JPanel, donc ça ne correspond pas à ce que je souhaite.

    Merci !

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    je ne connais pas trop les VolatileImage, mais voici quelques propositions :
    - tu peux essayer d'appeler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setBackground(new Color(0, 0, 0, 0));
    sur le composant qui dessine l'image
    - si ça ne marche pas, redessiner l'image de fond sur la VolatileImage à chaque actualisation du spectre (pas pratique, mais bon) : remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wGrp.setColor(getBackground());
    wGrp.fillRect(0, 0, getSize().width, getSize().height);
    par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // dans le constructeur :
    Image backgroundImage; // image de fond dessinée dans le JPanel qui contient this.
     
    // à la place des 2 lignes ci-dessus
    Point p = this.getPosition();
    wGrp.drawImage(backgroundImage, -p.x, -p.y, null);
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre confirmé Avatar de scorbo
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 176
    Par défaut
    Merci pour les idées

    Je n'ai pas réussi avec la première solution, en revanche la seconde fonctionne bien mais c'était prévisible ça ralenti énormément l'affichage, du coup je l'ai abandonnée.

Discussions similaires

  1. Récupérer les coordonnées d'une image sur JPanel
    Par abdel_java dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 03/11/2014, 22h09
  2. Problème image de fond JPanel
    Par lotto90 dans le forum Composants
    Réponses: 8
    Dernier message: 10/08/2012, 10h34
  3. image fond JPanel
    Par fantomas261 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 20/11/2007, 10h36
  4. Probleme image de fond JPanel
    Par Aurel_ dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 24/05/2007, 15h06
  5. [Swing] images et jPanel
    Par nma dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 08/10/2004, 23h20

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