Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : probleme de raffraichissement d'image [ Archives / API ] (Azdruyel)

lundi 5 juillet 2004 à 11:08:25 | probleme de raffraichissement d'image

Azdruyel


Bonjour a tous!
Aujourd'hui,un nouveau jour, et donc un nouveau probleme!!!
Alors voila, mon truc c'est que j'affiche en fond dans un JPanel une image (cela ce fait au moment de la creation de ce dernier avec la methode paintComponents), mais lorsque je change d'image de fond, et ben j'arrive pas a raffraichir le JPanel pour que l'on puisse voir la nouvelle image.
Pour ceux qui ont le temps ou que ca interesse, bah je vous met le code du JPanel que j'ai deja fait, et si quelqu'un avait une idee de comment faire le refresh(), et ben ca me sauverai grandement!!!:)

import javax.swing.*;
import java.awt.Image;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;


/**
*
* @author farid
*
* La classe ImagePanel permet de créer un Panel permettant d'aficher une image en fond
* Cette classe va nous permettre d'afficher l'image que l'on va charger
*/
public class ImagePanel extends JPanel
{
private BufferedImage image;
private int w; // largeur de l'image
private int h; // hauteur de l'image
private int x,y; // coordonnées du coin sup gauche de l'image

private int x1=0,y1=0; // coordonnées du coin sup gauche de la zone d'annotation
private int x2=0,y2=0; // largeur et hauteur de la zone d'annoation

private int taille=13; //taille de la police de la zone d'annotation

private JTextArea are;
private Color couleurChoisie;
private JColorChooser tcc;
private Choice choixm;
private Image mon_image;
private Toolkit toolkit;

/**
* Le constructeur :
* @param fileImg le fichier de l'image.
* @param x coordonnée x du coin supérieur gauche.
* @param y coordonnée y du coin supérieur gauche.
* @param width largeur de l'image.
* @param height hauteur de l'image.
*/
public ImagePanel(File fileImg,int x,int y,int width,int height)
{
super();

/** Accès au toolkit : **/
toolkit = Toolkit.getDefaultToolkit();



/**si le fichier est vide on charge l'image fichierVide**/
if(fileImg==null)
{
mon_image = toolkit.getImage(this.getClass().getResource("fichierVide.jpg"));
}
/**sinon on recupère l'adresse du fichier selectionné**/
else
{
mon_image=toolkit.getImage(fileImg.getAbsolutePath());
}

/**on convertit l'image en BufferedImage**/
image = toBufferedImage(mon_image);


this.x = x;
this.y = y;
w = width;
h = height;

/**Zone de Texte permettant d'effectuer les annotations**/
are=new JTextArea();
are.setForeground(Color.black);
are.setFont(new Font("Comic sans MS",Font.BOLD,taille));
are.setSelectionColor(Color.yellow);
are.setOpaque(false); //on rend la zone de texte invisible
are.setBorder(BorderFactory.createLineBorder(Color.black));
are.setLineWrap(true); //On souhaite un retour à ligne automatique
are.setWrapStyleWord(true); //On souhaite que les mots ne soient pas coupés

//add(are);
}



/**
* Gere l'affichage graphique du JPanel, ainsi que le refraichissement.
*/
public void paintComponent(Graphics g)
{
Graphics2D g2 =(Graphics2D) g;
super.paintComponent(g2);
g2.drawImage(image,x,y,w,h,null);
}



public void paint( Graphics g )
{
Graphics2D g2 =(Graphics2D) g;
super.paint( g2 );

/**Couleur du rectangle representant la zone d'annotation**/
g2.setColor(couleurChoisie);

/**Degré de transparence de la zone d'annotation (ici transparence = 30% --> 0.3f)**/
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f )); //

/**Tracé du rectangle representant la zone d'annotation**/
g2.fillRect(
x1, // x
y1, // y
x2, // largeur
y2); // hauteur
}



/**
* Gere les evenements de glissement de sourie (bouton presse)
*/
public void mouseDragged(MouseEvent e)
{
x2=(int)(e.getPoint().getX())-x1;
y2=(int)(e.getPoint().getY())-y1;

are.setSize(x2,y2);
this.repaint();
}


/**
* Gerer les evenement lors du deplacement de la sourie
*/
public void mouseMoved(MouseEvent e)
{
}


/**
* Evenement appelle alors d'un clic de sourie
*/
public void mouseClicked(MouseEvent e)
{
}


/**
* Evenement appelle alors que la sourie sort de les frontieres d'un composant
*/

/**
* Gere les evements au moment ou le bouton de la souris est presse
*/
public void mousePressed(MouseEvent e)
{
x1 = (int)(e.getPoint().getX()-7);
y1 = (int)(e.getPoint().getY()-30);
are.setLocation(x1,y1);
}


/**
* Gere les evenements quand le bouton de souris est relache apres glissement
*/
public void mouseReleased(MouseEvent e)
{
}


/**
* Permet de récuperer la couleur du JColorChooser
*/
public Color getCouleur()
{
return couleurChoisie;
}


public BufferedImage toBufferedImage(Image image) {
/* On test si l'image n'est pas déja une instance de BufferedImage */
if( image instanceof BufferedImage ) {
/* cool, rien à faire */
return( (BufferedImage)image );
} else {
/* On s'assure que l'image est complètement chargée */
image = new ImageIcon(image).getImage();

/* On crée la nouvelle image */
BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB );
Graphics g = bufferedImage.createGraphics();
g.drawImage(image,0,0,null);
g.dispose();

return( bufferedImage );
}
}

/**
* @return Returns the image.
*/
public BufferedImage getImage() {
return image;
}
/**
* @param image The image to set.
*/
public void setImage(BufferedImage image) {
this.image = image;
}

/**
* @return Returns the mon_image.
*/
public Image getMon_image() {
return mon_image;
}
/**
* @param mon_image The mon_image to set.
*/
public void setMon_image(Image mon_image) {
this.mon_image = mon_image;
}


/**
* @return Returns the h.
*/
public int getH() {
return h;
}
/**
* @param h The h to set.
*/
public void setH(int h) {
this.h = h;
}
/**
* @return Returns the w.
*/
public int getW() {
return w;
}
/**
* @param w The w to set.
*/
public void setW(int w) {
this.w = w;
}
/**
* @return Returns the x.
*/
public int getX() {
return x;
}
/**
* @param x The x to set.
*/
public void setX(int x) {
this.x = x;
}
/**
* @return Returns the x1.
*/
public int getX1() {
return x1;
}
/**
* @param x1 The x1 to set.
*/
public void setX1(int x1) {
this.x1 = x1;
}
/**
* @return Returns the x2.
*/
public int getX2() {
return x2;
}
/**
* @param x2 The x2 to set.
*/
public void setX2(int x2) {
this.x2 = x2;
}
/**
* @return Returns the y.
*/
public int getY() {
return y;
}
/**
* @param y The y to set.
*/
public void setY(int y) {
this.y = y;
}
/**
* @return Returns the y1.
*/
public int getY1() {
return y1;
}
/**
* @param y1 The y1 to set.
*/
public void setY1(int y1) {
this.y1 = y1;
}
/**
* @return Returns the y2.
*/
public int getY2() {
return y2;
}
/**
* @param y2 The y2 to set.
*/
public void setY2(int y2) {
this.y2 = y2;
}
}


Voila et pis merci a tous :)

lundi 5 juillet 2004 à 11:58:58 | Re : probleme de raffraichissement d'image

toffe12


je suppose que tu veux rafraichier lorsque tu emploie setImage ou setMon_Image, iol faut rajouter dans ces fonction la methode repaint() qui redessinera ton jpanel

lundi 5 juillet 2004 à 12:30:53 | Re : probleme de raffraichissement d'image

Azdruyel


Alors si ca pouvait raffraichir quand je fais setMon_Image, bah c clair que ca serait bien cool, et le prob c que je n'arrive pas a trouver la fonction pour redessiner mon panel, du coup je me retrouve tout bloque et c'est pour ca que je lance mon appel : "AU SECOUUUUUUUUUUUUUURS!!!"
Voila

lundi 5 juillet 2004 à 15:28:48 | Re : probleme de raffraichissement d'image

Asrull

tite précision.
ton code est illisible je m'explique, je sait pas avec quel outil tu bosses en java (perso c ultraedit) mais le coup des commentaire inutiles qui saturent le source, ça m'irrite tellement le cerveau que je n'arrive pas à lire (ct mon coup de tête.
cela mis à part (mais je te dis tout ça à l'aveugle).
Je comprend pas trop ce que tu veux dire par redessiner ton panel. repaint redessine ton panel. Par contre un problème qui peut se poser c'est que le repaint soit lancé avant même que l'image suivante soit chargée en mémoire, Utilise tu un MediaTracker ? (j'ai vu qq part un bufferedImage mais suis pas sur que ce soit suffisant)

Oobaï TaPou !

lundi 5 juillet 2004 à 15:41:03 | Re : probleme de raffraichissement d'image

Asrull

mais toffe12 a raison il te manque un repaint() dans setImage et setMon_Image. Ton Instruction pour mesurer le chargement de l'image new ImageIcon().getImage() brrr ... c moyen. le MediaTracker te donne beaucoup plus de contrôle.

Oobaï TaPou !

lundi 5 juillet 2004 à 21:19:46 | Re : probleme de raffraichissement d'image

Azdruyel


Bon dans un premier temps, merci a tous les 2 d'avoir tout de meme mater le code, j'ai eu honte quand je l'ai mis comme ca mais c'est que mon patron me mettait la pression avant que je l'envoie chier, du coup j'ai fait a la va vite!!!
Alors je reprend en plus cool vu que ma journee est fini.
Donc je bosse sous Eclipse et je remet le code sans les commentaire pour ton cerveau Asrull , ca seront con de choper une meningite a cause d'une irritation aigue du cerveau!!!

import javax.swing.*;
import java.awt.Image;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;


public class ImagePanel extends JPanel
{
private BufferedImage image;
private int w;
private int h;
private int x,y;

private int x1=0,y1=0;
private int x2=0,y2=0;

private int taille=13;

private JTextArea are;
private Color couleurChoisie;
private JColorChooser tcc;
private Choice choixm;
private Image mon_image;
private Toolkit toolkit;


public ImagePanel(File fileImg,int x,int y,int width,int height)
{
super();

toolkit = Toolkit.getDefaultToolkit();

if(fileImg==null)
{
mon_image = toolkit.getImage(this.getClass().getResource("fichierVide.jpg"));
}
else
{
mon_image=toolkit.getImage(fileImg.getAbsolutePath());
}

image = toBufferedImage(mon_image);


this.x = x;
this.y = y;
w = width;
h = height;

are=new JTextArea();
are.setForeground(Color.black);
are.setFont(new Font("Comic sans MS",Font.BOLD,taille));
are.setSelectionColor(Color.yellow);
are.setOpaque(false);
are.setBorder(BorderFactory.createLineBorder(Color.black));
are.setLineWrap(true);
are.setWrapStyleWord(true);
}


public void paintComponent(Graphics g)
{
Graphics2D g2 =(Graphics2D) g;
super.paintComponent(g2);
g2.drawImage(image,x,y,w,h,null);
}



public void paint( Graphics g )
{
Graphics2D g2 =(Graphics2D) g;
super.paint( g2 );

g2.setColor(couleurChoisie);

g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f ));

g2.fillRect(x1, y1, x2, y2);
}



public BufferedImage toBufferedImage(Image image) {
if( image instanceof BufferedImage ) {
return( (BufferedImage)image );
} else {
image = new ImageIcon(image).getImage();

BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB );
Graphics g = bufferedImage.createGraphics();
g.drawImage(image,0,0,null);
g.dispose();

return( bufferedImage );
}
}

}

Pour le ImageIcon().getImage(), c'est du code que j'ai choper sur le site, sinon mon probleme est que je ne sais pas comment faire le repaint(), ni que les mediatracker existaient, mais je vais aller me documenter demain!!!
Enfin voila et toutes mes excuses pour la premiere version du code, et encore merci a vous 2



Cette discussion est classé dans : public, int, image, void, return


Répondre à ce message

Sujets en rapport avec ce message

afficher la position du curseur [ par fatimazahrazaidi ] salut, je cherche a determiner la position du curseur sur une image une fois que je click sur une position le curseur reste tjr a sa place et les coor JTable- clic sur image [ par thassa ] bonjour,Le code ci-dessous affiche un tableau contenant des images.le problème est que si je clique pour la premiere fois sur l'image pour afficher un Utiliser l'état d'une case à cocher dans une JTable pour faire une requette SQL [ par baratribord ] Bonjour,J'ai écrit un programme qui lit les informations d'une base de données MySql et qui les affichent dans une JTable.A cette JTable j'ai rajouté Utiliser l'état d'une case à cocher dans une JTable pour faire une requette SQL [ par baratribord ] /* j'ai mis également ce message dans la partie débutant ayant repris la programmation après un long moment d'arrêt sans doute ce message est mieux iç affichage d'un fichier xml dans un table [ par samira46 ] salut, bon j'ai un petit pb et je veux l'aide si vous voulez,bon j'ai un fichier xml et je veux afficher ce fichier dans un table mais l'affichage se animation qui ne réagit pas [ par natou ] Bonjour à tous,       Je dois créer un applet qui implémente "Runnable".  Je dois y ajouter un thread qui lance une petite animation toute simple.  Ce pb image [ par bidules ] voici le code.l'erreur retourner est exeption null pointer a la ligne 29 (qd j'appelle a.largeur());en fait j'essaye juste d'affichier une image mais Redimensionner image dans applet [ par EvilGost ] alors, j'ai un petit prog en java qui affiche une image dans une applet.Le probleme, c'est que l'applet doit faire 300*200 et que l'image est en 600*4 Intégrer une image créée à un panel [ par Elisa23 ] Bonjour à tous !Je voudrais avoir sur la même page un texte qui défile et un bouton...J'y arrive presque, mais le texte et le bouton se superposent au ajouter dans cette table des button (JAVA JTABLE JBUTTON) [ par zarziszita ] salut a toutes le monde mon probleme que j'ai envie ajouter deux button a la fin de table une des button permet ajouter un ligne .le methode main se t


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,530 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.