Dessin et rafraichissement sous swing

Dessin et rafraichissement sous swing - Java - Programmation

Marsh Posté le 16-05-2004 à 19:15:22    

Bonjour.
 
J'essaie de faire un jeu que vous trouverez a l'adresse suivante si mon serveur tourne:
[url]
http://amauryxiv.no-ip.info:8080/pacman/pacman.htm
[/url]
 
Comme vous le verrez, en haut a gauche de mon JPanel conscre au score, il ya des dessins parasites qui apparaissent.
 
Quelqu'un a-t-til une idee de par quel truchement ce genre de parasites peuvent apparaitre ?
 
Merci d'avance a ceux qui connaissent bien swing et les graphics.


---------------
Amaury.
Reply

Marsh Posté le 16-05-2004 à 19:15:22   

Reply

Marsh Posté le 16-05-2004 à 22:40:12    

il semblerait ca a un rapport avec le double-buffering ... Mais comme je sais pas du tout ce que c'est ...


---------------
Amaury.
Reply

Marsh Posté le 17-05-2004 à 04:57:48    

swing utilise le double buffering par defaut donc ne ten occupe pas, sinon ta page mets 3 plombes a s afficher chez moi :/
 

Reply

Marsh Posté le 17-05-2004 à 08:10:49    

xiluoc a écrit :

swing utilise le double buffering par defaut donc ne ten occupe pas, sinon ta page mets 3 plombes a s afficher chez moi :/


Ben oui c'est normal t'as essaye de te connecter chez moi en pleine nuit; et la nuit ma machine et donc mon serveur sont eteints .....
Reessaie plus tard en journee si t'as l'occasion.
 
Pour ce qui est du double-buffering, je vois bien qu'on peut difficilement s'en passer pour des pbs de performance, mais ce que je vois aussi, c'est quand je l'enleve, le bug disparait. C'est pour ca que j'en parle.
 


---------------
Amaury.
Reply

Marsh Posté le 18-05-2004 à 18:38:49    

Ben j'esperait au moins une reponse ou deux ... Personne ne connait vraiment bien Swing alors ?


---------------
Amaury.
Reply

Marsh Posté le 18-05-2004 à 18:54:30    

pack();
validate();
repaint();

Reply

Marsh Posté le 18-05-2004 à 18:58:29    

EpoK a écrit :

pack();
validate();
repaint();


 
Je suis pas sur que tu as bien compris ma question .........


---------------
Amaury.
Reply

Marsh Posté le 18-05-2004 à 20:22:43    

EpoK a écrit :

pack();
validate();
repaint();

hop, tu sors.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-05-2004 à 21:42:45    

amauryxiv a écrit :

Ben j'esperait au moins une reponse ou deux ... Personne ne connait vraiment bien Swing alors ?


 
C'est un peu hard...
Il est open-source ton péty pacman? Si tu veux je regarde, mais là sans la moindre ligne de code...
C'est assez peu probable que le problème vienne de SWING. Vérifie bien tes repaint.
 
Sinon il est bien ton pacman, j'y ai perdu 12 minutes de ma vie [:itm]

Reply

Marsh Posté le 18-05-2004 à 22:52:14    

Seabee a écrit :

C'est un peu hard...
Il est open-source ton péty pacman? Si tu veux je regarde, mais là sans la moindre ligne de code...
C'est assez peu probable que le problème vienne de SWING. Vérifie bien tes repaint.
 
Sinon il est bien ton pacman, j'y ai perdu 12 minutes de ma vie [:itm]


 
 
Merci du compliment. Mais il est pas encore termine .....
Ouais ya des chances que le probleme vienne pas de swing, mais j'ai beau chercher, je vois pas ce que ca peut etre.
 
Mes paint ils sont tous betes .... Ce qui est bizarre, c'est que je ne repeins jamais les deux panels (tableau et score) en meme temps. Donc je vois pas comment le paint de l'un peut parasiter le paint de l'autre.
 
Je pourrais bien t'envoyer le code, mais comme il est long tu serais un peu perdu je pense.
 
Par contre un trux qu'est sur, c'est que le bug est en rapport avec le fonctionnement du double-buffering. Parce que quand j'enleve le double-buffering, plus de bug ........
 
C'est peut-etre la dessus que quelqu'un pourrait m'amener des précisions.
 
Merci a ceux qui repondent.


---------------
Amaury.
Reply

Marsh Posté le 18-05-2004 à 22:52:14   

Reply

Marsh Posté le 18-05-2004 à 22:58:30    

tu es en multithread ? tu a bien suivi la règle du thread unique ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-05-2004 à 23:07:05    

nraynaud a écrit :

tu es en multithread ? tu a bien suivi la règle du thread unique ?


 
C'est quoi la regle du thread unique ??????
 
Oui je suis en multithread. Pour chaque personnage t'as un Timer par exmeple.


---------------
Amaury.
Reply

Marsh Posté le 18-05-2004 à 23:11:43    

amauryxiv a écrit :

C'est quoi la regle du thread unique ??????

J'ai trouvé le bug [:itm]
 
 
un article qui parle de "LA REGLE" :
http://java.sun.com/products/jfc/t [...] eads3.html
 
le tuto swing/threads :
http://java.sun.com/docs/books/tut [...] reads.html


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-05-2004 à 23:46:14    

nraynaud a écrit :

J'ai trouvé le bug [:itm]
 
 
un article qui parle de "LA REGLE" :
http://java.sun.com/products/jfc/t [...] eads3.html
 
le tuto swing/threads :
http://java.sun.com/docs/books/tut [...] reads.html


 
Ouais ........ Enfin j'y comprends rien c'est en anglais. Et pis y disent que repaint est thread-safe alors que ca appelle invokeLater .... C'est le monde a l'envers. Je dois pas comprendre ce que veux dire thread-safe.
 
Enfin bref en appelant un paintImmediatly au lieu d'un repaint, le bug disparait
 
Visiblement mes deux panels partagent qqchose; mais quoi ?  
Un Graphics ? un buffer ?
 
Merci de vos reponse.


---------------
Amaury.
Reply

Marsh Posté le 18-05-2004 à 23:49:29    

c'est nul, je vois pas l'intrérêt d'un repaint ou d'un paintImmediately.
 
Perso, j'ai encore jamais utilisé ces fonctions en swing.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 18-05-2004 à 23:50:47    

nraynaud a écrit :

c'est nul, je vois pas l'intrérêt d'un repaint ou d'un paintImmediately.
 
Perso, j'ai encore jamais utilisé ces fonctions en swing.


 
Ben qu'est ce que tu veux utiliser d'autres pour afficher qqchose ?????


---------------
Amaury.
Reply

Marsh Posté le 18-05-2004 à 23:51:50    

nraynaud a écrit :

c'est nul, je vois pas l'intrérêt d'un repaint ou d'un paintImmediately.
 
Perso, j'ai encore jamais utilisé ces fonctions en swing.

t'as jamais utilisé repaint() ?

Reply

Marsh Posté le 19-05-2004 à 00:05:47    

R3g a écrit :

t'as jamais utilisé repaint() ?

non, pas en swing.
 
Je suis le seul du forum à savoir comment on doit utiliser les composants swing ou quoi ?
 
on leur envoie des évènements, depuis le modèle, si le coposant décide que ça change la tronche du composant, il repeint, sinon, il repeint pas.
 
 
faire un setBidule() sur un composant, vous pouvez vérifier, ça créé un évènement de changement du paramètre. Le handler d'évènements se démerde avec la peinture et le layout.


Message édité par nraynaud le 19-05-2004 à 00:06:12

---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 19-05-2004 à 00:07:58    

nraynaud a écrit :

non, pas en swing.
 
Je suis le seul du forum à savoir comment on doit utiliser les composants swing ou quoi ?
 
on leur envoie des évènements, depuis le modèle, si le coposant décide que ça change la tronche du composant, il repeint, sinon, il repeint pas.
 
 
faire un setBidule() sur un composant, vous pouvez vérifier, ça créé un évènement de changement du paramètre. Le handler d'évènements se démerde avec la peinture et le layout.

ben ouais mais quand tu fais des composants à toi, faut bien appeler repaint() à un moment ou à un autre...

Reply

Marsh Posté le 19-05-2004 à 00:10:28    

R3g a écrit :

ben ouais mais quand tu fais des composants à toi, faut bien appeler repaint() à un moment ou à un autre...

Faire des composants perso, c'est pas donné à tout le monde. On peut déjà faire plein de trucs en combinant ce qui existe.
 
Je suis même pas sûr que ce soit repaint() la fonction à appeller.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 19-05-2004 à 00:13:01    

nraynaud a écrit :

Faire des composants perso, c'est pas donné à tout le monde. On peut déjà faire plein de trucs en combinant ce qui existe.
 
Je suis même pas sûr que ce soit repaint() la fonction à appeller.

Disons que quand j'appelle repaint() c'est que j'ai codé paint() moi-même. Et oui c'est repaint() qu'il faut appeler.
L'exemple bateau que j'ai c'est un composant qui permet d'afficher une image.

Reply

Marsh Posté le 19-05-2004 à 00:28:23    

R3g a écrit :

Disons que quand j'appelle repaint() c'est que j'ai codé paint() moi-même. Et oui c'est repaint() qu'il faut appeler.
L'exemple bateau que j'ai c'est un composant qui permet d'afficher une image.

on ne code pas le paint() sois-même en swing !
 
on peut éventuellement toucher à paintComponent(), par contre.
http://java.sun.com/docs/books/tut [...] cepts.html


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 19-05-2004 à 00:30:51    

je vois pas de repaint là :
 
http://java.sun.com/docs/books/tut [...] ctice.html
 
 
Dans l'esprit, je conçois bien que, pas exemple, un jeu doit se repeindre régulièrement, pour montrer l'annimation.
 
Mais en fait, c'est l'état du jeu qui a changé, c'est donc bien suite à une modification du modèle qu'on va faire de la peinture.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 19-05-2004 à 11:12:56    

nraynaud a écrit :

on ne code pas le paint() sois-même en swing !
 
on peut éventuellement toucher à paintComponent(), par contre.
http://java.sun.com/docs/books/tut [...] cepts.html

Citation :

Swing components generally repaint themselves whenever necessary. [...] Behind the scenes, when a visible property changes the repaint method is invoked on the component to request that it be scheduled for painting.


Donc dans un composant que tu écris, il faut bien caser le repaint() dans les setters qui le nécessitent, il va pas s'y mettre tout seul.
Pour paint() / paintComponent() tu as raison, normalement paintComponent() suffit.

Reply

Marsh Posté le 19-05-2004 à 12:59:01    

Enfin bref, un jeu c'est du graphisme pur, c'est pas un modele medel-view et on est bien oblige de recoder la methode paintComponent. Sachant ca, pour rafrachir les graphismes on a bien besoin de repaint() ou d'une methode qui joue le meme role.
Ya rien de plus evident.  
 
Enfin ce debat n'a pas repondu a ma question initiale. Le fait que des graphismes, normalement propres a mon premier panel, apparaissent sur mon deuxieme panel prouve les deux panel, et notement leur methodes paint(), partagent qqchose. Alors la question "qu'est ce qu'ils partagent ? Quel objet peut bien servir a l'affichage des deux composants ?"


---------------
Amaury.
Reply

Marsh Posté le 19-05-2004 à 13:10:25    

amauryxiv a écrit :

Quel objet peut bien servir a l'affichage des deux composants ?"

théoriquement aucun. A mon avis tu fais une bidouille pas très nette dans tes methodes paint() ou paintComponent()

Reply

Marsh Posté le 19-05-2004 à 15:41:07    

amauryxiv a écrit :

Enfin bref, un jeu c'est du graphisme pur, c'est pas un modele medel-view

super, tu as bien lu toi.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 19-05-2004 à 20:11:59    

R3g a écrit :

théoriquement aucun. A mon avis tu fais une bidouille pas très nette dans tes methodes paint() ou paintComponent()


 
Ben non je fais aucune bidouille justement. J'ai mon Graphics, je fais g.ceci(), g.cela() et puis c'est tout. Je vois pas de bidouille la-dedans.
 
Maintenant j'ai essaye de mettre des gifs animes. Et le resultat est le meme : des parasites apparaissent, ce qui doit apparaitre sur un panel apparait sur l'autre .........


---------------
Amaury.
Reply

Marsh Posté le 19-05-2004 à 20:13:14    

amauryxiv a écrit :

Ben non je fais aucune bidouille justement. J'ai mon Graphics, je fais g.ceci(), g.cela() et puis c'est tout. Je vois pas de bidouille la-dedans.
 
Maintenant j'ai essaye de mettre des gifs animes. Et le resultat est le meme : des parasites apparaissent, ce qui doit apparaitre sur un panel apparait sur l'autre .........

et tu te repasses pas les Graphics d'un composant à l'autre o un truc comme ça? tu pourrais poster un peu de code (création des composants et méthodes de dessin) ?

Reply

Marsh Posté le 19-05-2004 à 21:44:17    

R3g a écrit :

et tu te repasses pas les Graphics d'un composant à l'autre o un truc comme ça? tu pourrais poster un peu de code (création des composants et méthodes de dessin) ?


 
Bon ben voila un peu de code pour ceux qui s'y retrouveront:
 
Ma classe principale:

Code :
  1. package pacman.applets;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. import pacman.tableau.*;
  6. import java.io.*;
  7. import pacman.timers.*;
  8. import pacman.graphics.*;
  9. import java.util.Enumeration;
  10. import java.net.URL;
  11. import javax.sound.sampled.*;
  12. import pacman.son.*;
  13. /**
  14. * <p>Title: Site personnel</p>
  15. * <p>Description: Site internet</p>
  16. * <p>Copyright: Copyright (c) 2002</p>
  17. * <p>Company: none</p>
  18. * @author Amaury de Boussineau
  19. * @version 1.0
  20. */
  21. public class FramePacman extends JFrame {
  22.   protected Tableau tableau;
  23.   protected Rectangle surfaceARepeindre = new Rectangle(0, 0, 0, 0);
  24.   protected boolean repeintPersonnage = false;
  25.  
  26.   protected PanelTableau panelJeu = new PanelTableau();
  27.   protected PanelScore panelScore = new PanelScore();
  28.  
  29.   protected Clip clip = null;
  30.   public FramePacman() throws Exception {
  31.     ObjectInputStream oos = new ObjectInputStream(this.streamTableaux());
  32.     int[][] points = (int[][]) oos.readObject();
  33.     this.tableau = new Tableau(this, points);
  34.     try {
  35.         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  36.     }
  37.     catch(Exception e) {
  38.         this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
  39.     }
  40.     this.setResizable(false);
  41.     this.getContentPane().setLayout(new BoxLayout(this.getContentPane(), BoxLayout.X_AXIS));
  42.     this.getContentPane().add(panelJeu);
  43.     this.getContentPane().add(panelScore);
  44.     this.pack();
  45.     this.setVisible(true);
  46.    
  47.     try {
  48.         this.clip = ClipProvider.getClip();
  49.         this.clip.open(AudioSystem.getAudioInputStream(new URL("http://amauryxiv.no-ip.info:8080/pacman/sons/fond.wav" )));
  50.     }
  51.     catch(Exception e) {
  52.         this.clip = null;
  53.     }
  54.    
  55.     this.commencerTableau();
  56.   }
  57.   protected Clip getClip() {
  58.       return this.clip;
  59.   }
  60.  
  61.  
  62.   protected InputStream streamTableaux() throws Exception {
  63. //    FileInputStream fis = new FileInputStream("tableaux" );
  64.       URL url = new URL("http://amauryxiv.no-ip.info:8080/pacman/tableaux" );
  65.       InputStream fis = url.openStream();
  66.       return fis;
  67.   }
  68.   public void commencerTableau() {
  69.     this.tableau.init();
  70.     ((JPanel) this.getContentPane()).paintImmediately(0, 0, 800, 800);
  71.     int reponse = JOptionPane.showOptionDialog(this, "Commencer ?", "PACMAN", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null);
  72.     if(reponse == JOptionPane.YES_OPTION) {
  73.         this.tableau.start();
  74.         if(this.clip != null) this.clip.loop(Clip.LOOP_CONTINUOUSLY);
  75.     }
  76.     else {
  77.         try {
  78.             System.exit(0);
  79.         }
  80.         catch(Exception e) {
  81.             this.dispose();
  82.         }
  83.     }
  84.   }
  85.   public void finTableau(boolean resultat) {
  86.     if(this.clip != null) {
  87.         this.clip.loop(0);
  88. //        this.clip.stop();
  89.     }
  90.     for(Enumeration e = MyTimers.timers.elements(); e.hasMoreElements();) {
  91.       ((java.util.Timer) e.nextElement()).cancel();
  92.     }
  93.     this.afficherResultat(resultat);
  94.   }
  95.  
  96.  
  97.   public void afficherResultat(boolean resultat) {
  98.       try {
  99.           synchronized(this) {
  100.               this.wait(2000);
  101.           }
  102.       }
  103.       catch(Exception e) {
  104.       }
  105.       String annonce = resultat ? "Gagné !" : "Perdu !";
  106.       JOptionPane.showMessageDialog(this, annonce, "Résultat", JOptionPane.INFORMATION_MESSAGE);
  107.       this.commencerTableau();
  108.      
  109.   }
  110.  
  111.  
  112.  
  113.   /**A PARTIR DE LA SE TROUVENT TOUTES LES METHODES ET CLASSES GRAPHIQUES QUE J'UTILISE
  114.    */
  115.   public synchronized void repeindre(Drawable element) {
  116.     this.repeintPersonnage = true;
  117.     this.surfaceARepeindre = element.surface(this.panelJeu);
  118.     panelJeu.paintImmediately(this.surfaceARepeindre);
  119.     this.repeintPersonnage = false;
  120.   }
  121.  
  122.   public synchronized void paint(Graphics g) {
  123.       super.paint(g);
  124.   }
  125.   public synchronized void actualiserScore() {
  126.       this.panelScore.paintImmediately(0, 0, 300, 800);
  127.   }
  128.   private class DirectionListener extends KeyAdapter {
  129.     public void keyPressed(KeyEvent e) {
  130.       Direction d;
  131.       int key = e.getKeyCode();
  132.       if(key == KeyEvent.VK_LEFT) d = Direction.LEFT;
  133.       else if(key == KeyEvent.VK_RIGHT) d = Direction.RIGHT;
  134.       else if(key == KeyEvent.VK_UP) d = Direction.TOP;
  135.       else if(key == KeyEvent.VK_DOWN) d = Direction.BOTTOM;
  136.       else return;
  137.       FramePacman.this.tableau.newDirectionForPacman(d);
  138.     }
  139.   }
  140.  
  141.  
  142.   private class PanelTableau extends JPanel {
  143.     public PanelTableau() {
  144.       super();
  145.       this.setBackground(Color.BLACK);
  146.       this.setPreferredSize(new Dimension(800, 800));
  147.       this.addKeyListener(new DirectionListener());
  148.       this.setFocusable(true);
  149.       this.requestFocus();
  150.     }
  151.     public void paintComponent(Graphics g) {
  152.         if(FramePacman.this.repeintPersonnage) {
  153.             Rectangle r = FramePacman.this.surfaceARepeindre;
  154.             if(r != null) {
  155.                 g.setClip(r);
  156.                 g.setColor(Color.BLACK);
  157.                 g.fillRect(r.x, r.y, r.width, r.height);
  158.                 FramePacman.this.tableau.redraw(g, this);
  159.             }
  160.         }
  161.         else {
  162.           super.paintComponent(g);
  163.           FramePacman.this.tableau.draw(g, this);
  164.         }
  165.     }
  166.   }
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.   private class PanelScore extends JPanel {
  175.       public PanelScore() {
  176.           this.setPreferredSize(new Dimension(300, 800));
  177.           this.setBackground(Color.BLACK);
  178.       }
  179.      
  180.       public void paintComponent(Graphics g) {
  181.           super.paintComponent(g);
  182.           Font font = new Font("Comic", Font.BOLD, 60);
  183.           g.setFont(font);
  184.           g.setColor(Color.CYAN);
  185.           g.drawRoundRect(5, 5, 290, 230, 20, 20);
  186.           g.drawRoundRect(6, 6, 288, 228, 20, 20);
  187.           g.drawRoundRect(7, 7, 286, 226, 20, 20);
  188.           g.drawString("Points:", 10, 100);
  189.           g.setColor(Color.BLUE);
  190.           g.drawRoundRect(5, 255, 290, 230, 20, 20);
  191.           g.drawRoundRect(6, 256, 288, 228, 20, 20);
  192.           g.drawRoundRect(7, 257, 286, 226, 20, 20);
  193.           g.drawString("Bonus:", 10, 350);
  194.           g.setColor(Color.RED);
  195.           g.drawRoundRect(5, 505, 290, 230, 20, 20);
  196.           g.drawRoundRect(6, 506, 288, 228, 20, 20);
  197.           g.drawRoundRect(7, 507, 286, 226, 20, 20);
  198.           g.drawString("Score:", 10, 600);
  199.           g.setColor(Color.BLUE);
  200.           g.drawString(String.valueOf(tableau.bonus), 10, 450);
  201.           g.setColor(Color.CYAN);
  202.           g.drawString(String.valueOf(tableau.pointsJoueur), 10, 200);
  203.           g.setColor(Color.RED);
  204.           g.drawString(String.valueOf(tableau.bonus + tableau.pointsJoueur), 10, 700);
  205.       }
  206.          
  207.   }
  208.   public static void main(String[] args) throws Exception {
  209.     new FramePacman();
  210.   }
  211. }


 
Normalement je fais aucune bidouille. Les Graphics je les prends comme ils arrivent et j'y touche pas.


Message édité par amauryxiv le 19-05-2004 à 21:45:13

---------------
Amaury.
Reply

Marsh Posté le 19-05-2004 à 22:05:16    

     public synchronized void paint(Graphics g) {
            super.paint(g);
      }  
 
ça fait quoi là ça ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 19-05-2004 à 22:10:01    

nraynaud a écrit :

public synchronized void paint(Graphics g) {
            super.paint(g);
      }  
 
ça fait quoi là ça ?


 
Ben a synchroniser la methode la methode paint pour qu'elle puisse pas etre appelee par deux threads en meme. Ca c'est juste pour retrouver le tableau complet quand j'iconifie et rouvre la fenetre;c'est uniquement pour ca.
En bref: la methode repeindre(Drawable) appelle paint() et quand tu agrandit le fentre ca appelle paint() aussi. Mais faut pas que deux appels soient confondus prce qu'ils ne doivent pas faire la meme chose.
Le premier repeint seulement un parsonnage, le deuxieme repeint tout le panel.


---------------
Amaury.
Reply

Marsh Posté le 19-05-2004 à 22:13:45    

j'ai rien compris.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 19-05-2004 à 22:54:45    

nraynaud a écrit :

j'ai rien compris.


Ba h peu importe c'est pas important et c'est pas ca qui fait foirer le truc ........


---------------
Amaury.
Reply

Marsh Posté le 19-05-2004 à 23:48:50    

j'ai lu en diagonale et j'ai pas vu le résultat parce que ton prog veut pas se lancer chez moi. Je vote pour un problème entre l'origine de surfaceARepeindre et l'origine de ton Graphics dans la méthode paint().

Reply

Marsh Posté le 20-05-2004 à 19:56:33    

R3g a écrit :

j'ai lu en diagonale et j'ai pas vu le résultat parce que ton prog veut pas se lancer chez moi. Je vote pour un problème entre l'origine de surfaceARepeindre et l'origine de ton Graphics dans la méthode paint().


 
Mon programme peut pas se lancer quand ma machine est eteinte ...... T'as pas du tomber au bon moment.
 
Y risque pas d'y avoir un probleme avec surfaceARepeindre. C'est trop simple. Quand au Graphics utilise dans paint(), ben c'est celui fournit par Swing !...


---------------
Amaury.
Reply

Marsh Posté le 21-05-2004 à 16:52:13    

Pffffffffff vous m'avez tous laisse tombe bande de nuls.


---------------
Amaury.
Reply

Marsh Posté le 21-05-2004 à 18:35:37    

amauryxiv a écrit :

Mon programme peut pas se lancer quand ma machine est eteinte ...... T'as pas du tomber au bon moment.
 
Y risque pas d'y avoir un probleme avec surfaceARepeindre. C'est trop simple. Quand au Graphics utilise dans paint(), ben c'est celui fournit par Swing !...

Ce que je voulais dire c'est que dans un Graphics passé à la maéthode paint() d'un composant, les coordonnées sont relatives à ce composant. Et que donc le point 0, 0 de ton Rectangle ne correspond pas forcement au point 0,0 de ton Graphics...

Reply

Marsh Posté le 21-05-2004 à 18:47:51    

R3g a écrit :

Ce que je voulais dire c'est que dans un Graphics passé à la maéthode paint() d'un composant, les coordonnées sont relatives à ce composant. Et que donc le point 0, 0 de ton Rectangle ne correspond pas forcement au point 0,0 de ton Graphics...


Oui mais bien sur .... mais mon rectangle il est pas (0, 0), il est ailleurs, la ou il doit etre.
Bref, les bugs n'ont rien a voir avec ca.
Le bug vient du fait que les composants partagent un Graphics (celui du buffer) et que je sais pas comment tout ca marche.


---------------
Amaury.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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