Rafraichir une image

Résolu
lilyy59 Messages postés 22 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 19 mars 2012 - 12 mars 2012 à 18:21
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 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

12 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 mars 2012 à 08:48
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);
}
}
}
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
12 mars 2012 à 19:47
Bonjour,

Une fois que tu as modifié ton image, il faut que tu fasses un repaint sur le panel : paneImage.repaint();
0
lilyy59 Messages postés 22 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 19 mars 2012
12 mars 2012 à 20:43
Merci mais ça ne marche pas. Mon chemin change bien mais pas l'image.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
12 mars 2012 à 22:20
Et l'extension est bien .jpg et non .JPG par exemple ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lilyy59 Messages postés 22 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 19 mars 2012
13 mars 2012 à 08:27
Non l'extension est la même ...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 mars 2012 à 09:35
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
0
cs_dan34 Messages postés 28 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 13 mars 2012
13 mars 2012 à 15:09
Essais : paneImage.repaint();
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 mars 2012 à 15:37
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.
0
cs_dan34 Messages postés 28 Date d'inscription dimanche 27 mars 2005 Statut Membre Dernière intervention 13 mars 2012
13 mars 2012 à 17:54
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 ...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
13 mars 2012 à 19:36
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.
0
lilyy59 Messages postés 22 Date d'inscription lundi 1 novembre 2010 Statut Membre Dernière intervention 19 mars 2012
14 mars 2012 à 23:08
Merci ça fonctionne.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
15 mars 2012 à 08:28
De rien.

a+
0
Rejoignez-nous