Rafraichir une image [Résolu]

lilyy59 22 Messages postés lundi 1 novembre 2010Date d'inscription 19 mars 2012 Dernière intervention - 12 mars 2012 à 18:21 - Dernière réponse : cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention
- 15 mars 2012 à 08:28
Bonjour,

J'essaie de faire une application et dans une de mes pages, je demande de choisir une image avec un JFileChooser, le probleme c'est qu'une fois qu'on a choisi une image on ne peut plus la modifier, enfin en apparence, quand j'affiche le chemin il a bien changer mais pas dans mon panel.

public void mouseClicked(MouseEvent arg0) {
JFileChooser fc=new JFileChooser();
fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
fc.addChoosableFileFilter(new FileNameExtensionFilter("Image  jpg","jpg"));
int rep = fc.showOpenDialog(null);
if(rep==JFileChooser.APPROVE_OPTION){ //si on a appuyer sur OK
File file=fc.getSelectedFile(); // declaration du fichier selectionné
String chemin=file.getAbsolutePath(); //declaration variable contenant le chemin
String extension=chemin.substring(chemin.lastIndexOf('.')+1, chemin.length());
if(extension.equals("jpg")){
nomImage = chemin;
ImageIcon icon =  new ImageIcon( chemin);
System.out.println(chemin);
Image ima = scaleImage(icon.getImage(), paneImage.getWidth(), paneImage.getHeight());
ImageIcon imrez = new ImageIcon(ima);
JLabel image = new JLabel(imrez);
System.out.println(image);
paneImage.add(image);
repaint();
paneImage.setVisible(true);
}
}
}


Merci
Afficher la suite 

Votre réponse

12 réponses

Meilleure réponse
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 13 mars 2012 à 08:48
3
Merci
Alors le problème vient de ton utilisation de la méthode add sur le JPanel qui contient l'image. Je ne sais pas quel conteneur il contient mais dans tous les cas, l'image n'est pas ajoutée comme il convient.

Je te conseil d'utiliser cette classe qui contient une méthode setImage(). De cette manière, tu ne recréé que très peu d'objets et ton image est modifiée facilement.


import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;

import javax.swing.JPanel;

public class PanelImage extends JPanel {

private static final long serialVersionUID = -6350324456764768311L;

private Image image;

public void setImage(Image image) {
this.image = image;
repaint();
}

public Image getImage() {
return image;
}

@Override
public void paintComponent(Graphics g){
if(image!=null){
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
}
}

Merci cs_Julien39 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 73 internautes ce mois-ci

Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 12 mars 2012 à 19:47
0
Merci
Bonjour,

Une fois que tu as modifié ton image, il faut que tu fasses un repaint sur le panel : paneImage.repaint();
Commenter la réponse de cs_Julien39
lilyy59 22 Messages postés lundi 1 novembre 2010Date d'inscription 19 mars 2012 Dernière intervention - 12 mars 2012 à 20:43
0
Merci
Merci mais ça ne marche pas. Mon chemin change bien mais pas l'image.
Commenter la réponse de lilyy59
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 12 mars 2012 à 22:20
0
Merci
Et l'extension est bien .jpg et non .JPG par exemple ?
Commenter la réponse de cs_Julien39
lilyy59 22 Messages postés lundi 1 novembre 2010Date d'inscription 19 mars 2012 Dernière intervention - 13 mars 2012 à 08:27
0
Merci
Non l'extension est la même ...
Commenter la réponse de lilyy59
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 13 mars 2012 à 09:35
0
Merci
Tu peux regarder cette source, j'ai documenté et fait un code plus propre : http://www.javafr.com/codes/AFFICHER-IMAGE-ARRIERE-PLAN-DANS-JPANEL_54144.aspx
Commenter la réponse de cs_Julien39
cs_dan34 28 Messages postés dimanche 27 mars 2005Date d'inscription 13 mars 2012 Dernière intervention - 13 mars 2012 à 15:09
0
Merci
Essais : paneImage.repaint();
Commenter la réponse de cs_dan34
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 13 mars 2012 à 15:37
0
Merci
C'est également la première chose que je lui ai proposé mais ca ne fonctionne pas.

Il ne fait pas ca de la manière la plus simple qui soit. Je dirais qu'il utilise un Layout et étant donné qu'il n'appelle pas validate, les modifications ne sont pas enregistrées et le repaint sur panelImage ne change rien.

Quand bien même il appellerait un validate, il ne supprime pas l'ancienne image donc, ca ne fonctionnerait pas non plus.
Commenter la réponse de cs_Julien39
cs_dan34 28 Messages postés dimanche 27 mars 2005Date d'inscription 13 mars 2012 Dernière intervention - 13 mars 2012 à 17:54
0
Merci
Désolé pas capté que tu l'avais déjà proposé.

Par contre, JPanel héritant de JComponent, j'aurais utilisé paint plutôt que paintComponent.
A essayer ...
Commenter la réponse de cs_dan34
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 13 mars 2012 à 19:36
0
Merci
JComponent, c'est une classe de Swing, donc, on préfère paintComponent, mais paint fonctionne également étant donné que Swing est base sur awt.
Commenter la réponse de cs_Julien39
lilyy59 22 Messages postés lundi 1 novembre 2010Date d'inscription 19 mars 2012 Dernière intervention - 14 mars 2012 à 23:08
0
Merci
Merci ça fonctionne.
Commenter la réponse de lilyy59
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 15 mars 2012 à 08:28
0
Merci
De rien.

a+
Commenter la réponse de cs_Julien39

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.