Problème affichage graphique

Problème affichage graphique - Java - Programmation

Marsh Posté le 26-11-2006 à 15:12:28    

Bonjour
Je débute en Java et j'ai un petit problème avec Graphics. Quand je lui demande de tracer une ligne:
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. class Dess{
  4. static Graphics ouvreFenetre(int l, int h) {
  5. Frame fenetre = new Frame("Dessin" );
  6. fenetre.addWindowListener(new WindowAdapter() {
  7.  public void windowClosing(WindowEvent we) {
  8.      System.out.println("Fenetre fermee, c'est fini." );
  9.      System.exit(0);
  10.  }
  11.     });
  12. fenetre.setBounds(10,10, l, h);
  13. fenetre.setBackground(Color.white);
  14. fenetre.setForeground(Color.black);
  15. fenetre.setVisible(true);
  16. return fenetre.getGraphics();
  17.     } 
  18.         public static void main(String[] args) {
  19.   final int largeur = 200, hauteur = 100;
  20.   Graphics gr = ouvreFenetre(largeur, hauteur);
  21.   gr.drawLine(0,0,150,100);
  22.          }
  23. }


 
je crois que la ligne s'affiche mais elle est aussitot effacée.
Si je mets 1000 Drawline elle ne s'efface pas car elle se retrace tout le temps mais existe t'il une autre solution à ce problème?

Reply

Marsh Posté le 26-11-2006 à 15:12:28   

Reply

Marsh Posté le 27-11-2006 à 00:23:26    

Apres recherches, il faut redefinir la methode PaintComponent d'un panel a priori.
 
Maintenant si tu ne veux pas te prendre la tete, tu fais une boucle While avec une condition du genre While(1), mais c'est pas tres elegant.

Reply

Marsh Posté le 27-11-2006 à 17:44:07    

simboss a écrit :

Apres recherches, il faut redefinir la methode PaintComponent d'un panel a priori.
 
Maintenant si tu ne veux pas te prendre la tete, tu fais une boucle While avec une condition du genre While(1), mais c'est pas tres elegant.


 
J'ai cherché paintcomponent dans javadoc et j'ai trouvé des trucs mais je ne vois pas trop ce que je peux faire.
C'est bizarre aussi je n'ai pas le problème sur la version 1.4.2 ca marche.
Est-ce que avec mon programme et la version 1.5.0 ca marche sur ton ordinateur?

Reply

Marsh Posté le 28-11-2006 à 01:23:21    

A priori sous eclipse avec la version 1.5 ca marche encore, maintenan je ne certifie rien, Eclipse fait bcp de chose que l'on ne lui demande pas.  
 
Tu utilises quoi pour compiler et executer?
 
Ton probleme c'est que la ligne s'efface mais la fenetre reste ou tout s'efface? Normalement elle s'affiche, mais si tu bouges ta fenetre, ou si tu passes une autre fenetre par dessus ta ligne disaparait, parce que rien ne dit a ton programme ce qu'il faut reafficher quand il se passe qqch dans le genre, c'est a ca que sert la redefinition de paintcomponent normalement.
 
Sinon paintComponent ca demande de faire vraiment differement ton programme, je ne sais pas si tu as deja vu tout ca, le plus simple ca serait d'aller voir un tuto dans ce cas.

Reply

Marsh Posté le 28-11-2006 à 18:32:02    

simboss a écrit :

A priori sous eclipse avec la version 1.5 ca marche encore, maintenan je ne certifie rien, Eclipse fait bcp de chose que l'on ne lui demande pas.  
 
Tu utilises quoi pour compiler et executer?
 
Ton probleme c'est que la ligne s'efface mais la fenetre reste ou tout s'efface? Normalement elle s'affiche, mais si tu bouges ta fenetre, ou si tu passes une autre fenetre par dessus ta ligne disaparait, parce que rien ne dit a ton programme ce qu'il faut reafficher quand il se passe qqch dans le genre, c'est a ca que sert la redefinition de paintcomponent normalement.
 
Sinon paintComponent ca demande de faire vraiment differement ton programme, je ne sais pas si tu as deja vu tout ca, le plus simple ca serait d'aller voir un tuto dans ce cas.


 
Pour compiler et exécuter j'utilise les commandes javac et java sous DOS.
 
La fenêtre reste en place mais la ligne s'efface.meme si je fais rien du tout la ligne disparait (en fait je le vois pas tellement c'est rapide mais je le sais avec le *1000.)

Reply

Marsh Posté le 01-12-2006 à 18:45:50    

au moment ou tu l'utilise, ton "getGraphics()" te renvoit quelque chose de null...
 
il faut en fait que tu mette un peu de code dans la méthode paint ou repaint, pourquoi?
 
parce que pour se dessiner (paint) ou redessiner(repaint) :), la fenetre va aller lire le code qu'il y a dans ces méthodes.
 
voilà un exemple rapide, et plus correct avec le model object. Si tu as une quesiton n'hésites pas:
 
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. class Dess extends Frame{
  4. public Dess(int l, int h) {
  5.  super("Fenetre Dess" );
  6.  this.addWindowListener(new WindowAdapter() {
  7.   public void windowClosing(WindowEvent we) {
  8.    System.out.println("Fenetre fermee, c'est fini." );
  9.    System.exit(0);
  10.   }
  11.  });
  12.  this.setSize(l, h);
  13.  this.setBackground(Color.white);
  14.  this.setForeground(Color.black);
  15.  this.setVisible(true);
  16. }
  17. private void dessineUnTrait(int xStart,int yStart,int xEnd,int yEnd ){
  18.  Graphics g = this.getGraphics();
  19.                 // je teste si g et non nul
  20.  if (g != null) {
  21.                 System.out.println("g null, peux pas dessiner :(" )
  22.                 g.drawLine(xStart, yStart, xEnd, yEnd);
  23.         }       
  24. }
  25.     @Override
  26.     public void paint(Graphics arg0) {
  27.      super.paint(arg0);
  28.  arg0.drawLine(0,0,150,100);
  29.     }
  30. public static void main(String[] args) {
  31.  final int largeur = 200, hauteur = 100;
  32.  Dess dessin = new Dess(largeur, hauteur);
  33. }
  34. }


Message édité par doctib le 01-12-2006 à 18:48:31
Reply

Marsh Posté le 12-12-2008 à 21:10:17    

bonsoir à tous, je travail sur un projet, et je veux représenter mes donner sous forme d'un modèle de réseau de pétri, pouvez vous m'aider pour dessiner le modèle de réseau (graphe ou réseau de pétri,)
meri à tous.

Reply

Sujets relatifs:

Leave a Replay

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