[java] dessiner une image ailleurs que dans paint()

dessiner une image ailleurs que dans paint() [java] - Java - Programmation

Marsh Posté le 17-08-2002 à 17:53:00    

salut , j'ai besoin d'afficher une image dans application ,j'y arrive sans probléme mais j'aimerais savoir si il n'y pas moyen d'eviter que ceci se passe dans la methode paint(Graphics g) ?
 
 
mon probleme etant que si fait une methode comme ceci :
 

Code :
  1. void toto(Graphics g)
  2. {
  3. ...
  4. }


 
 
il n'y pas moyen de l'appeler ailleurs que dans paint.
 
je suis pas tres clair mais c'est pas facile a expliquer  :pt1cable:  
 

Reply

Marsh Posté le 17-08-2002 à 17:53:00   

Reply

Marsh Posté le 17-08-2002 à 19:45:26    

bin c quoi ton problème déjà ?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 17-08-2002 à 23:44:02    

Je sais pas si c'est ca ta question, mais tu peux recuperer un objet Graphics par toi meme, sans forcement utiliser celui passé à la méthode paint().

Reply

Marsh Posté le 18-08-2002 à 10:43:42    

R3g a écrit a écrit :

Je sais pas si c'est ca ta question, mais tu peux recuperer un objet Graphics par toi meme, sans forcement utiliser celui passé à la méthode paint().




 
oui c'est ça que je veux faire , la question est peut on afficher un objet graphique sans passer par la methode paint .
 
 
sinon je capte pas trop quel sont les types de composant sur lesquel l'image peux s'afficher , des panel ,des layout ?
 

Reply

Marsh Posté le 18-08-2002 à 11:08:13    

Tu peux récupérer un object Graphics de ton composant en utilisant la méthode getGraphics() de JComponent ou Component.
 
Ensuite, on peut utiliser cet objet pour dessiner directement dans le composant. Cela dit, j'ai jamais essayé ;)

Reply

Marsh Posté le 18-08-2002 à 11:14:43    

gm_superstar a écrit a écrit :

Tu peux récupérer un object Graphics de ton composant en utilisant la méthode getGraphics() de JComponent ou Component.
 
Ensuite, on peut utiliser cet objet pour dessiner directement dans le composant. Cela dit, j'ai jamais essayé ;)




 
ça a l'air tres interessant ça , j'espére que ça va marcher , j'essai de créer une interface de jeux avec des photos , des boutons etc mais c'est  trop le bordel ...


Message édité par Grand Aigle le 18-08-2002 à 11:16:39
Reply

Marsh Posté le 18-08-2002 à 18:51:48    

si quelqu'un pouvait m'expliquer ou s'affiche exactement les images  car j'arrive pas a les manipuler a ma guise  
 
quand je fais :
 

Code :
  1. g.drawImage(toto,1, 1, this);


l'image s'affiche dans mon FlowLayout mais ensuite j'aimerais l'effacer et mettre mes boutons etc

Reply

Marsh Posté le 18-08-2002 à 18:57:45    

Grand Aigle a écrit a écrit :

 
l'image s'affiche dans mon FlowLayout mais ensuite j'aimerais l'effacer et mettre mes boutons etc  




:??:
ce que tu veux faire, c'est carément modifier l'affichage qu'i y a dans ton layout ... pourquoi tu utilises pas plutot un autre panel ? tu affiches ton image dans un panel que tu mets dans ton flowlayout, puis quand tu veux remplacer l'image par tes boutons etc ... tu enlève le panel avec l'image et tu le remplaces avec un panel sans l'image et avec les boutons

Reply

Marsh Posté le 18-08-2002 à 19:04:39    

benou a écrit a écrit :

 
:??:
ce que tu veux faire, c'est carément modifier l'affichage qu'i y a dans ton layout ... pourquoi tu utilises pas plutot un autre panel ? tu affiches ton image dans un panel que tu mets dans ton flowlayout, puis quand tu veux remplacer l'image par tes boutons etc ... tu enlève le panel avec l'image et tu le remplaces avec un panel sans l'image et avec les boutons




 
 
ou j'aimerais bien faire ça , mais je suis pas sur que mon image puisse s'afficher dans un panel .
elle s'affiche dans le fond de la fentre de mon application j'ai aucune maitrise la dessus  :??:   :pt1cable:


Message édité par Grand Aigle le 18-08-2002 à 19:05:36
Reply

Marsh Posté le 18-08-2002 à 20:09:30    

Grand Aigle a écrit a écrit :

ou j'aimerais bien faire ça , mais je suis pas sur que mon image puisse s'afficher dans un panel .
elle s'affiche dans le fond de la fentre de mon application j'ai aucune maitrise la dessus  :??:   :pt1cable:



Ben justement quand tu as écrit :

Citation :

Code :
  1. g.drawImage(toto,1, 1, this);



tu l'appelles à partir de quelle méthode ? Et 'this' représente quoi ?

Reply

Marsh Posté le 18-08-2002 à 20:09:30   

Reply

Marsh Posté le 19-08-2002 à 09:43:38    

gm_superstar a écrit a écrit :

 
Ben justement quand tu as écrit :

Citation :

Code :
  1. g.drawImage(toto,1, 1, this);



tu l'appelles à partir de quelle méthode ? Et 'this' représente quoi ?




 
 :eek2: this ça represente le composant ou je dois l'afficher ?
 
je l'appel de la methode paint (Graphic g);


Message édité par Grand Aigle le 19-08-2002 à 09:44:39
Reply

Marsh Posté le 19-08-2002 à 10:48:53    

Grand Aigle a écrit a écrit :

si quelqu'un pouvait m'expliquer ou s'affiche exactement les images  car j'arrive pas a les manipuler a ma guise  
 
quand je fais :
 

Code :
  1. g.drawImage(toto,1, 1, this);


l'image s'affiche dans mon FlowLayout mais ensuite j'aimerais l'effacer et mettre mes boutons etc  




Une technique pas mal utilisé est de sortir les images qui ne doivent pas être affichée de l'écran. C'est ce que j'utilise et c'est assez pratique, ça t'évite de gérer plein de panel ...

Reply

Marsh Posté le 19-08-2002 à 10:54:11    

Si ça peut t'aider, voici une classe dont je me sers pour gérer le positionnement de mes images (désolé, j'ai pas eu le temps de mettre les commentaires) :
 

Code :
  1. import java.awt.*;
  2. import java.awt.image.*;
  3. import java.awt.geom.*;
  4. import javax.swing.*;
  5. public class ImageToDraw {
  6.     private Image image;
  7.     private Point2D.Double position;
  8.    
  9.    
  10.     private ImageToDraw(double x,double y) {
  11.         position=new Point2D.Double(x,y);
  12.     }
  13.     public ImageToDraw(String source,double x,double y) {
  14.         this(x,y);
  15.         image=Toolkit.getDefaultToolkit().createImage(source);
  16.     }
  17.     public ImageToDraw(Image image,double x,double y) {
  18.         this(x,y);
  19.         this.image=image;
  20.     }
  21.     public ImageToDraw(Image image) {
  22.         this(image,0f,0f);
  23.     }
  24.     public ImageToDraw(String source) {
  25.         this(source,0f,0f);
  26.     }
  27.    
  28.     public void setImage(Image image) {
  29.         this.image=image;
  30.     }
  31.     public Image getImage() {
  32.         return image;
  33.     }
  34.     public Point2D.Double getPosition() {
  35.         return position;
  36.     }
  37.     public double getX() {
  38.         return position.getX();
  39.     }
  40.     public double getY() {
  41.         return position.getY();
  42.     }
  43.     public int getWidth(ImageObserver o) {
  44.         return image.getWidth(o);
  45.     }
  46.     public int getHeight(ImageObserver o) {
  47.         return image.getHeight(o);
  48.     }
  49.    
  50.     public void setLocation(double x,double y) {
  51.         position.setLocation(x,y);
  52.     }
  53.     public void setX(double x) {
  54.         position.setLocation(x,position.getY());
  55.     }
  56.     public void setY(double y) {
  57.         position.setLocation(position.getX(),y);
  58.     }
  59.     public void translate(double xOff,double yOff) {
  60.         position.setLocation(position.getX()+xOff,position.getY()+yOff);
  61.     }
  62.    
  63.     // Place l'image en dehors du panel
  64.     public void hide(JPanel p) {
  65.         this.setLocation(p.getWidth()+10,p.getHeight()+10);
  66.     }
  67.    
  68.     public boolean drawImage(Graphics g,JPanel p) {
  69.         return g.drawImage(this.getImage(),(int)this.getX(),(int)this.getY(),p);
  70.     }
  71.     public boolean fitImage(Graphics g,JPanel p) {
  72.         return g.drawImage(this.getImage(),(int)this.getX(),(int)this.getY(),p.getWidth(),p.getHeight(),p);
  73.     }
  74. }


Message édité par bobuse le 19-08-2002 à 10:54:33
Reply

Marsh Posté le 19-08-2002 à 10:57:22    

merci je vais essayer de redefinir la methode drawImage comme tu le fait dans ta classe.
 
car la je fais des test et quand j'affiche une image dans un panel meme en enlevant ce panel l'image reste afficher .


Message édité par Grand Aigle le 19-08-2002 à 10:57:35
Reply

Marsh Posté le 19-08-2002 à 11:05:39    

bobuse, c propre ça : dessiner l'image en dehors du panel quand tu veux qu'elle disparaisse !?  
J'trouve pas trop... y a surement d'autres moyens (hé non, je connais pas ça)

Reply

Marsh Posté le 19-08-2002 à 11:19:29    

El_Gringo a écrit a écrit :

bobuse, c propre ça : dessiner l'image en dehors du panel quand tu veux qu'elle disparaisse !?  
J'trouve pas trop... y a surement d'autres moyens (hé non, je connais pas ça)




C'est clair ! ;) Mais bon, après pas mal de tentatives, c'est ce que je trouve de plus efficaces ! Mais si quelqu'un a mieux, je suis preneur !

Reply

Marsh Posté le 19-08-2002 à 11:28:33    

merci vous m'avez bien aidé , ça fonctionne a peu pres !!!

Reply

Marsh Posté le 20-08-2002 à 10:22:16    

Une autre solution que je vais peut-être adopter :
chacun de mes objets à afficher contient un flag(drawFlag) qui indique si il doit être dessiné ou pas. Grossomodo, ça donne ça :
 

Code :
  1. public class ObjectToDraw {
  2.     // ...
  3.     private boolean drawFlag;
  4.     public ObjectToDraw {
  5.         // initialement, l'objet n'est pas dessiné
  6.         drawFlag=false;
  7.     }
  8.     public void show() {
  9.         drawFlag=true;
  10.     }
  11.     public void hide() {
  12.         drawFlag=false;
  13.     }
  14.     public void draw(Graphics2D g) {
  15.         if (drawFlag) {
  16.             // on dessine l'objet sur le contexte fourni
  17.         }
  18.     }
  19. }


 
Qu'est-ce que vous en pensez ?
C'est vrai que ça fait un booléen par objet en plus, mais c'est peut-être plus propre :D

Reply

Marsh Posté le 20-08-2002 à 10:23:34    

N.B. : La méthode draw est appelé dans le paint du composant ou tout est affiché.

Reply

Marsh Posté le 20-08-2002 à 11:08:43    

finalement ça me plait bien cette technique ! :D  
Je sais pas si c'est plus propre que l'autre, mais en tout cas, c'est plus pratique et surtout plus générique.
En fait, si c'est plus propre, car quand un objet est positionné, c'est con d'effacer ses coordonnées pour le faire disparaître, parce que après, il faut se débrouiller pour les récupérer ...
 
lerci à El_Gringo pour m'avoir fait un peu réfléchir !

Reply

Marsh Posté le 20-08-2002 à 11:14:02    

Bah oui, c clair que c plus propre. Et aussi vachement plus logique. Au moins, qd l'image ne doit pas être dessinée, tu la dessines pas !

Reply

Marsh Posté le 20-08-2002 à 11:26:37    

El_Gringo a écrit a écrit :

Bah oui, c clair que c plus propre. Et aussi vachement plus logique. Au moins, qd l'image ne doit pas être dessinée, tu la dessines pas !




!!bé oui, mais dans plusieurs doc., il disait que c'était vachement utilisé et tout ça ... mais bon, ils devaient pas être à jour, pasque c'est carément plus POO cette méthode !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed