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 :

PRBL affichage image avec jfilechooser


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut PRBL affichage image avec jfilechooser
    J'ai un ptit prbl que je n'arrive pas à remerdiér.
    J'ai envi de mettre un jfilerchooser et un jpanel dans la meme fenetre l'un au nord et l autre au sud.Des qui selectionne une image,l image apparait dans le jpanel,

    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
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    /*
     * affichagejchooser.java
     *
     * Created on 28 juin 2006, 16:56
     */
     
    package projetgroupama;
    import java.awt.event.*;
    import java.io.*;
    import java.awt.*;
    import javax.swing.*;
    import java.beans.*;
    import javax.swing.border.*;
    import java.io.File;
     
     
    import javax.media.jai.JAI;
    import javax.media.jai.RenderedOp;
     
    import javax.media.jai.widget.ScrollingImagePanel;
    import java.awt.image.renderable.ParameterBlock;
    import javax.media.jai.Interpolation;
    /**
     *
     * @author  Administrateur
     */
    public class affichagejchooser extends javax.swing.JFrame {
     
        /** Creates new form affichagejchooser */
        private FenApplication f;
        private affichagejchooser a;
        private String nom;
        RenderedOp im1;
        private ScrollingImagePanel imagePanel;
        private  JPanel p;
        public affichagejchooser(FenApplication f,affichagejchooser a) {
            this.f=f;
            this.a=a;
            this.nom="";
     
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            p=new JPanel();//CONTAINER
            jPanel1 = new JPanel();
            BorderLayout bord = new BorderLayout();
            p.setLayout(bord);
            setVisible(true);
     
     
            im1 = LoadTiff("C:\\Documents and Settings\\Administrateur\\Bureau\\ProjetGroupama\\ProjetGroupama\\src\\projetgroupama\\images\\img_noimage.tif");
            DisplayTiff(im1);
            repaint();
     
     
            JFileChooser jFileChooser2 = new JFileChooser();
            jFileChooser2.setFileSelectionMode(jFileChooser2.FILES_ONLY);
            jFileChooser2.setDialogType(jFileChooser2.OPEN_DIALOG);
            jFileChooser2.setDialogTitle("Ouvrir une image");
            jFileChooser2.setApproveButtonText("Choix du fichier...");
            jFileChooser2.setMultiSelectionEnabled(false);
     
            JFileFilter filtre = new JFileFilter();
            filtre.addType("tif");
            filtre.addType("jpg");
            filtre.setDescription("Fichiers image :.tif, .jpg");
     
     
            jFileChooser2.addChoosableFileFilter(filtre);
            jFileChooser2.setAccessory(new FilePreviewer(jFileChooser2,jPanel1));
            jFileChooser2.setAcceptAllFileFilterUsed(false);
     
            p.add("North",jFileChooser2);
            p.add("Center",jPanel1);
            setContentPane(p);
     
            if (jFileChooser2.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
                String fichier =jFileChooser2.getSelectedFile().getAbsolutePath();
                f.changementimage(fichier);
            }
     
        }
     
        public affichagejchooser(){}
     
        public void DisplayTiff(RenderedOp image) {
            imagePanel = new ScrollingImagePanel(image,p.getWidth()/2,p.getHeight()/2);
            jPanel1.add(imagePanel);
            repaint();
        }
     
     
     
        public RenderedOp   LoadTiff(String nom) {
            String image =nom;
            RenderedOp im = JAI.create("fileload", image);
     
            Interpolation interp = Interpolation.getInstance(Interpolation.INTERP_NEAREST);
            ParameterBlock pb = new ParameterBlock();
            pb.addSource(im);                   // The source image
            pb.add(0.5F);                       // The x origin
            pb.add(0.5F);                       // The y origin
            pb.add(0.5F);                       // The x translation
            pb.add(0.5F);                       // The y translation
            pb.add(interp);                      // The interpolation
            im  = JAI.create("scale",pb,null);
            return im;
        }
     
     
        // Variables declaration - do not modify                     
        private javax.swing.JFileChooser jFileChooser2;
        private javax.swing.JPanel jPanel1;
        // End of variables declaration                   
     
    }
    jFileChooser2.setAccessory(new FilePreviewer(jFileChooser2,jPanel1)); permet de des qui selectionne un fichier,je fais un add dans le jpanel

    Voici le 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
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
     
    package projetgroupama;
     
    import java.beans.*;
    import javax.swing.border.*;
    import java.awt.*;
    import javax.swing.*;
    import java.io.File;
     
     
    import javax.media.jai.JAI;
    import javax.media.jai.RenderedOp;
     
    import javax.media.jai.widget.ScrollingImagePanel;
    import java.awt.image.renderable.ParameterBlock;
    import javax.media.jai.Interpolation;
     
    public  class FilePreviewer extends JComponent implements PropertyChangeListener {
        //Variables globales
        ImageIcon thumbnail = null;
        RenderedOp im1;
        private ScrollingImagePanel imagePanel;
        private JPanel  jpanelimages;
        private String nom;
        private JPanel j;
        private JFileChooser fc;
     
        /**Constructeur*/
        public FilePreviewer(JFileChooser fc,JPanel jpanel) {
            this.fc=fc;
            this.j=jpanel;
            setPreferredSize(new Dimension(200, 100));
            fc.addPropertyChangeListener(this);
            setBorder(new BevelBorder(BevelBorder.LOWERED));
            this.nextFocus();
        }
     
        /**Méthode permettant le chargement des images*/
        public void loadImage(File f) {
            this.nom=f.getPath();
            if (f == null) {
                thumbnail = null;
            } else {
                ImageIcon tmpIcon = new ImageIcon(f.getPath());
                if(tmpIcon.getIconWidth() > 90) {
                    thumbnail = new ImageIcon(
                            tmpIcon.getImage().getScaledInstance(90, -1, Image.SCALE_DEFAULT));
                } else {
                    thumbnail = tmpIcon;
                }
            }
            affich(nom);
        }
     
        /**Méthode appelé dans le cas d'un changement de fichier sélectionné*/
        public void propertyChange(PropertyChangeEvent e) {
            String prop = e.getPropertyName();
            if(prop == JFileChooser.SELECTED_FILE_CHANGED_PROPERTY) {
                if(isShowing()) {
                    loadImage((File) e.getNewValue());
                    repaint();
                }
            }
        }
     
     
        public void affich(String noms){
            this.nom=noms;
            this.nom= nom.replace("\\","\\\\");
            this.im1 = LoadTiff(nom);
            DisplayTiff(im1);
            repaint();
        }
     
     
        public void DisplayTiff(RenderedOp image) {
            if(imagePanel == null) {
                imagePanel = new ScrollingImagePanel(image,this.j.getWidth(),this.j.getHeight());
                this.j.removeAll();
                this.j.add(imagePanel);
            } else {
                imagePanel.set(image);
     
            }
            repaint();
        }
     
     
        public  RenderedOp LoadTiff(String nom) {
            float ratio=0;
            float ratioDecalage=0.01f;
            float ratioLargeur=0;
            float ratioHauteur=0;
            String image =nom;
            RenderedOp im = JAI.create("fileload", image);
            int hauteur=im.getHeight();
            int largeur=im.getWidth();
            ratioLargeur=(float)this.j.getWidth()/largeur;
            ratioHauteur=(float)this.j.getHeight()/hauteur;
     
            if (ratioLargeur>=ratioHauteur) {
                ratio=ratioHauteur;
            } else {
                ratio=ratioLargeur;
            }
            ratio=ratio-ratioDecalage;
     
            Interpolation interp = Interpolation.getInstance(Interpolation.INTERP_NEAREST);
            ParameterBlock pb = new ParameterBlock();
     
     
     
            pb.addSource(im);                   // The source image
            pb.add(ratio);                       // The x origin
            pb.add(ratio);                       // The y origin
            pb.add(ratio);                       // The x translation
            pb.add(ratio);                       // The y translation
            pb.add(interp);         // The interpolation
     
     
            im  = JAI.create("scale",pb,null);
            return im;
        }
     
     
     
        /**Permet de rafraîchir le component*/
        public void paint(Graphics g) {
            super.paint(g);
            if(thumbnail != null) {
                int x = getWidth()/2 - thumbnail.getIconWidth()/2;
                int y = getHeight()/2 - thumbnail.getIconHeight()/2;
                if(y < 0) {
                    y = 0;
                }
     
                if(x < 5) {
                    x = 5;
                }
                thumbnail.paintIcon(this, g, x, y);
            }
    Pour ce qui est du resultat,une fenetre vide s'ouvre puis quelques temps plus tard le jfilechooser,des que je clique sur une image,le jfilechooser se ferme pour faire apparaitre le jpanel avec l'image selectionné
    Ce que je desirerais c(est le jfilechooser en haut,le jpanel en bas,des qui selectionne l image(non en faisant le bouton ouvirir),l image apparait en bas dans le jpanel,j avais reussi mais le prbl etait impossible de cliquer ensuite sur le bouton ouvir

    Merci de votre aide

  2. #2
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Bin apperement tu souhaite ton JFileChooser dans la meme fenetre que ton panel, le composant JFileChooser lui créer un JDialog donc ce n'est pas ce que tu désire il me semble. Tu devrais plutot te tourner vers JTree et ses listeners pour agir lors de la selection d'un élément...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    et comment ca marche jtree,ca me permetra de faire comme un actionlisternet pour le bouton ouvrir?
    J ai regardé vite fais JTree,c'est pour faire des arbres,un peu comme xml donc je ne vois pas trop en quoi ca pourais m'aider

    Pourais tu me donner un exemple....

  4. #4
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Bin c'est un arbre d'élement, qui te permet entre autre de voir les fichiers et dossiers présents sur ton disque dur. Avec le listerner adéquat, lorsque l'utilisateur sélectionnera un élément qui correspond a un fichier image ( à toi de faire en srte qu'il "filtre" les éléments), tu affichera l'image correspondante.
    Pour avoir un peu une idée d'un JTree, il y a le tutorial de sun.
    Bonne chance.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    merci de ta réponse,j'en aurais bien besoin

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 197
    Points : 42
    Points
    42
    Par défaut
    rien pigé mdr
    En gros pour résumé,mon jfilechooser sera remplacé par jtree....et il faut donc que je recommence tout,

  7. #7
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    Voulant moi même depuis quelque temps apprendre a utiliser le composant JTree, j'ai réaliser une version "béta" (entendez par là que c'est juste un truc écrit en 30min donc ...) de ce que tu recherches. Ne copie pas betement le code, je sais que c'est tentant mais au bout du compte ça ne t'aideras pas, parce que dans 1 semaine, tu devras réutiliser un JTree pour un projet différent et tu devras re-chercher un code convenant a ton projet pas trés pratique ^^.
    J'ai réutilisé les classes FileRenderer et FileTreeModel de la source proposer par Ioan Calapodescu, que j'ai modifier quelque peu ( et moi qui te faisais la leçon , mais je les ai comprise, enfin... ).
    Ce programme fonctionne a peu prés mais il y a quelqueq problemeq lors du raffraichissement de l'image, il faut donc parfois "resizer" la fenetre.
    Bonne change. Et regarde bien le tutorial de sun...

Discussions similaires

  1. Affichage détaillé avec JFileChooser
    Par wilv8 dans le forum Agents de placement/Fenêtres
    Réponses: 10
    Dernier message: 15/09/2008, 09h48
  2. affichage images avec lightbox
    Par serpolet dans le forum Flash
    Réponses: 0
    Dernier message: 18/06/2008, 01h00
  3. affichage image avec commande if ou autre
    Par geminos dans le forum Flash
    Réponses: 2
    Dernier message: 06/03/2008, 20h53
  4. [MySQL] problème affichage image avec sql
    Par igaurillac dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/02/2007, 18h04

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