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 :

redimensionement automatique d'une image


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut redimensionement automatique d'une image
    Bonjour,

    je cherche a faire la chose suivante:
    je voudrais redimensionner des images qui se trouvent dans une table lorsque je redimensionne les cellules qui les contiennent

    je m'explique:

    - j'ai des images dans une colonne d'une jtable,
    - avec un listener sur la table je peux faire varier la taille des cellules (genre de zoom )
    Chaque image se trouve dans un JXImagePanel qui est lui meme dans un JLabel qui sert de renderer.

    lorsque la taille de la cellule augmente, la taille du JXImagePanel reste fixe et la taille de l'image aussi.

    j'ai essayé de mettre un ComponentListener sur le label qui sert de renderer afin que celui ci recalcule et redimensionne la taille du JXImagePanel (j'ai surchargé la methode paintComponent pour redessiner l'image) mais sans resultat...

    existe t'il une solution pour redimensionner à la volée la taille d'une image lorsque l'on fait varier la taille du container qui la contient ?

    merci pour votre aide

  2. #2
    Membre expérimenté Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Par défaut
    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
    public class PanelImage extends javax.swing.JPanel 
    {
     
        java.awt.image.BufferedImage buffer;
     
        public PanelImage(String img) {
            initComponents();
            try
            {
                buffer = javax.imageio.ImageIO.read(new File(img));
            }
            catch(Exception e)
            {
               e.printStackTrace();
            }
        }
     
        public void paint(Graphics g)
        {
            BufferedImage small = new BufferedImage(this.getWidth(),this.getHeight(), buffer.getType());
            Graphics gg = small.getGraphics();
            gg.drawImage(buffer, 0, 0, small.getWidth(), small.getHeight(), null);
            gg.dispose();
            g.drawImage(small,0,0,null);
        }
     
        public static void main(String args[])
        {
            JFrame frame = new JFrame();
            frame.setLayout(new GridLayout(1,1));
            frame.add(new PanelImage("c:/a.JPG"));
            frame.setVisible(true);
        }
    }

  3. #3
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    et si tu fait en sorte que la table recoive un évènement de son TableModel de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new TableModelEvent(model, 0, Integer.MAX_VALUE, {index_de_la_colonne_avec_les_images});
    de manière à forcer la table à réafficher toutes les cellules de ta colonne avce des images ?

  4. #4
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    merci pour votre aide

  5. #5
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    quel était le problème finalement?

  6. #6
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    alors plusieurs choses

    la 1ere par rapport a ce que j'avais fait c'est que je recalculais la taille par rapport a la taille courante du jlabel (en faisant un rapport taille courante sur taille initiale qui me donnait l'echelle

    or mes jlabel qui etaient stockés dans un cache (pour eviter de reconstruire les images a chaque fois) prenait une taille de 0 dès qu'ils etaient plus dans le viewport donc ca n'allait pas

    j'ai donc changé en prenant la largeur de la colonne qui contient les images (declic qui m'est venu en lisant ta ligne de code
    et la sa fonctionnait bien sauf que le ComponentListener me prend 100% du proc (est ce que je l'ai utilisé d'une mauvais facon je n'en sais rien)
    donc j'ai opté pour la methode de "Lethal" qui fonctionne a merveille.

    La seule reticence par rapport a cette methode est qu'il me semblait qu'en Swing il fallait eviter au maximum de surcharger paint() qui propage les modif faite a l'objet Graphics à l'ensemble des enfants du conteneur.
    Mais bon etant donné que le panel est "tout au fond" je me suis dit que c'etait pas bien grave

    voila pour l'explication (que j'espere suffisament clair)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    remplaces paint par paintComponent et sera bon.

    Sinon je comprends pas bien l'utilité du JLabel en tant que conteneur dans ce que tu fais...

  8. #8
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    Citation Envoyé par sinok Voir le message
    remplaces paint par paintComponent et sera bon.

    Sinon je comprends pas bien l'utilité du JLabel en tant que conteneur dans ce que tu fais...
    exacte pour paintComponent

    et pour le JLabel il n'y a aucun interet c'est juste historique par rapport au code que je suis en train de modifier

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

Discussions similaires

  1. [Vxi3] Redimensionnement automatique d'une image
    Par LYS1980 dans le forum Webi
    Réponses: 1
    Dernier message: 23/09/2011, 16h46
  2. Réponses: 2
    Dernier message: 06/04/2011, 18h17
  3. Taille automatique d'une image en background
    Par shevalo dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 20/11/2010, 11h53
  4. changement automatique d'une image et d'un texte
    Par apfwl.87 dans le forum Word
    Réponses: 1
    Dernier message: 28/05/2009, 11h49
  5. Déterminer automatiquement le path pour une image
    Par mikedavem dans le forum Langage
    Réponses: 2
    Dernier message: 13/05/2006, 08h41

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