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

Java Discussion :

Changer image d'un JPanel après avoir choisi avec JFileChooser


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 306
    Par défaut Changer image d'un JPanel après avoir choisi avec JFileChooser
    Bonjour,

    Je galère un peu étant donné que je débute et donc je viens vers vous pour une nouvelle question.
    J'ai un bouton qui ouvre l'arborescence de l'ordinateur pour que l'utilisateur puisse picoher une image.
    Jusque là pas de soucis, je récupère bien l'image et je la copie dans un autre répertoire.
    1) Est ce qu'il y a moyen de spécifier le chemin de destination avec un chemin relatif et non absolu? ce qui donnerait un réel intérêt quand je déploierai l'appli?

    2) J'ai une classe qui hérite de jPanel
    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
    public class customPanel extends JPanel implements Serializable{
    	    Image image = null;
     
    	    public customPanel(Image image) {
    	        this.image = image;
    	    }
    	    public customPanel() {
     
    	    }
    	    public void setImage(Image image){
    	        this.image = image;
    	    }
     
    	    public Image getImage(Image image){
    	        return image;
    	    }
     
    	    public void paintComponent(Graphics g) {
    	        super.paintComponent(g); //paint background
    	        if (image != null) { //there is a picture: draw it
    	            int height = this.getSize().height;
    	            int width = this.getSize().width;
    	            //g.drawImage(image, 0, 0, this); //use image size          
    	            g.drawImage(image,0,0, width, height, this);
    	        }
    	    }
    }
    Et donc au moment où sélectionne une image, la copie se passe bien et je veux raffraichir mon jpanel avec l'image sélectionnée en faisant ceci mais rien ne s'affiche.

    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
    //Create a file chooser
    		final JFileChooser fc = new JFileChooser();
    		fc.setDialogTitle("Choisir une affiche");
    		//bouton servant à ouvrir la popup pour sélectionner une image
    		JButton btChooseImg = new JButton("Choisir une image");
    		btChooseImg.addActionListener(new ActionListener() {
    			public void actionPerformed(ActionEvent arg0) {
    				int returnVal = fc.showOpenDialog(fc);
    				if (returnVal == JFileChooser.APPROVE_OPTION) {
    		            File file = fc.getSelectedFile();
    		            //This is where a real application would open the file.
    		            System.out.println("Opening: " + file.getAbsolutePath());
    		            String dtFile = "chemin absolu/"+ file.getName();//getClass().getResourceAsStream("/affiche/"+ file.getName())
    		            CopyFile cp = new CopyFile();
    		            cp.copyfile(file.getAbsolutePath(), dtFile);
     
    		            BufferedImage img = null;
    		    		try {
     
    		    		    img = ImageIO.read(new File("affiche/"+ file.getName()));//img a bien été trouvé
    		    		} catch (IOException e) {
    		    			System.out.println("error.");
    		    		}
    		    		customPanel jPanelImage = new customPanel(img);
     
    		    		jPanelImage.setBounds(391, 58, 180, 244);
    		    		panDetail.add(jPanelImage);
    		        } else {
    		        	System.out.println("Open command cancelled by user.");
    		        }
    			}
    		});
    Merci de votre aide qui me débloquerai

  2. #2
    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
    Pour tout ce qui est stockage de fichiers qui ne sont pas directement fournis dans le jar, et qui doivent être aisément localisable quel que soit l'environement utilisateur, la méthode recommandée est de créer un répertoire (caché) dans le user home.

    Si tu vas voir dans ce home, tu remarqueras que plein d'application s'y sont déjà étalées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    File userHome = new File(System.getProperty("user.home"));
    String applicationName ="MonAppli";
    File myAppDir= new File(userHome,"."+applicationName);
    if(!myAppDir.exists()) {
       myAppDir.mkdir();
       //créer ici également les sous répertoires, fichiers de config & cie
    }
    Puis il suffit d'aller écrire/piocher dans ce répertoire selon tes besoins.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 306
    Par défaut
    Merci de votre réponse.

    Mais est-ce qu'avec cette méthode ça fonctionnera aussi bien sous windows que linux?

  4. #4
    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
    Elle est faite pour ça...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 306
    Par défaut
    Merci je vais sauver via ce chemin par contre savez vous pourquoi mon image ainsi que mon panel ne s affiche pas lorsque je selectionne une image. Et si je load une image a l init elle s affiche bien.

    Merci

  6. #6
    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
    Je ne réponds pas au questions de layout quand il y a du setBounds, vu que c'est une des pratiques à éviter autant que possible.

    Refais la même avec un layout digne de ce nom, et je répondrais sans faute.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 13/01/2014, 08h40
  2. Modifier la couleur de la cellule après avoir choisi une cellule
    Par forum dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 09/03/2011, 19h42
  3. Changer image sur un JPanel
    Par HunTR dans le forum Débuter
    Réponses: 2
    Dernier message: 29/03/2010, 09h27
  4. Changer le background (image) d'un JPanel
    Par citizenM dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 30/05/2006, 00h49

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