Coment dessiner sur un JPanel a partir d'une autre classe?

Coment dessiner sur un JPanel a partir d'une autre classe? - Java - Programmation

Marsh Posté le 25-11-2002 à 22:17:41    

alors voila dans mon appli g une classe qui extend JPanel dont g surchargé la methode paintComponent() pour réaliser un dessin
maintenant j'aimerais bien rajouter des dessins pardessus g essayé ca:

Code :
  1. public dessine (MonAutreClasse c)
  2. {
  3. c.getGraphics().drawLine(...)
  4. }


et ca marche pas  [:tomawack]  NullPointerExeption  
Aidez moi s'il vous plait

Reply

Marsh Posté le 25-11-2002 à 22:17:41   

Reply

Marsh Posté le 25-11-2002 à 23:56:24    

c'est sans doute parce que ton panel est pas encore affiché quand tu appelles ça : le contexte graphique (l'objet Graphics) n'est instancié qu'à l'affichage.

Reply

Marsh Posté le 25-11-2002 à 23:58:52    

gfive!
y'a un topic à moi tout chaud qui n'attend que toi!! :D


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 26-11-2002 à 12:44:09    

marche pas meme si j'appelle ma fonction apres tous les desins (et afichage) de mon JPanel :(  
d'autres idées?

Reply

Marsh Posté le 26-11-2002 à 13:04:39    

réctification : c en ecrivant le up que je me suis rendu compte que j'avais oublié d'essayer un truc

Citation :

le contexte graphique (l'objet Graphics) n'est instancié qu'à l'affichage.


g mis l'appel de ma fonction apres le show() du JFrame
maintenant ca s'execute mais mon affichage est ecrasé par le paintComponent du Jpanel en question=/

Reply

Marsh Posté le 26-11-2002 à 14:24:28    

C zarb, ton truc..enfin, je crois que tu devrais changer d'approche : le dessin de ta ligne, il faut qu'il soit fait DANS la méthode paintComponent (enfin, du coup, dans paint() en fait, puisque paintComponent appelle paint)  
 

Reply

Marsh Posté le 27-11-2002 à 12:06:21    

Le probleme c'est que dans le "cahier des charcges" j'ai  
* Une Classe Echiquier qui permet de dessiner l'echiquier...
*une Classe Piece qui permet de dessiner la piece et de la déplacer ... .
 
c assez vague sur la maniere de dessiner une piece

Reply

Marsh Posté le 27-11-2002 à 13:58:21    

bah....Dans un cas comme ça, il faut que tu réfléchisses de façon plus "objet", je dirais :  
Il te faut :  
- Une classe "modèle d'échiquier", qui sait où sont les pièces,  
- Une classe "echiquier" qui sait dessiner l'échiquer : elle demande au modèle les pièces à dessiner, puis donne à chaque pièce son context graphique, et lui "demande" de se dessiner dessus...
 
Perso, je ferais un truc du stye :

Code :
  1. public class Echiquier extends Cancas {
  2.   private ModeleEchiquer model;
  3. ...
  4. public void dessineEchiquier(Graphics g) {
  5. // Dessine les cases blanches et noires, et les lignes
  6. }
  7. public Rectangle getCell(int x, int y) {
  8. //retourne le rectangle (objet de java.awt) qui représente la case (x,y) de l'échiquier : dépend par conséquent de la taille d'affichage, de la largeur des lignes, etc..)
  9. }
  10. public void paint(Graphics g) {
  11.   dessineEchiquer(g);
  12.   Piece piece;
  13.   Rectangle case;
  14.   for (int i = 0; i < model.getPieces(); i++) {
  15.       piece = model.get(i);
  16.       case = getCell(piece.getX(), piece.getY();
  17.       g.setClip(case);
  18.       piece.draw(g, case.x, case.y);
  19.    }
  20. }
  21. }
  22. public interface Piece {
  23.     public int getX();
  24.     public int getY();
  25.     public void draw(Graphics g, int base_x, int base_y);
  26. }

 
 
Bon, après, le "for" est sans doute pas ce qu'on fait de mieux, mais c'est pas le point important dans ce design...L'important, c'est de bien séparer la "symbolique" (emplacement de la pièce, propriétaire, etc...géré dans le modèle, et dans les implémentations de l'interface pièce) et le dessin de l'échiquier, qui ne doit pas dépendre des pièces : il se fait toujours de la même façon..
 
Pour être rigoureux, il faudrait même 2 interfaces pour la pièce : une qui contient ses données (position, déplacements possibles à partir de la position, couleur, etc..) et une qui sait comment dessiner sa représentation à l'écran.
 
ouala ouala..

Reply

Marsh Posté le 27-11-2002 à 21:38:03    

merci bcp je v essayer de comprendre ton code  :hello:

Reply

Sujets relatifs:

Leave a Replay

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