IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

La fonction paint


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut La fonction paint
    Bonjour,
    j'essaye de faire un pong rond avec une arène et une raquette (pour l'instant)
    Je suis débutant en Java et en Swing, ayant toujours programmé en C je me trouve devant une impasse:
    Avant de lire le code je vous précise que j'ai pas mal tâtonner pour en arriver là il est donc assez (très) moche et je me demande bien comment il marche.
    En effet la méthode paint(Graphics g) doit apparemment être appelée par la méthode add(), or après que le main soit terminé elle est appelée 2 fois. Ma vision de C doit me jouer des tours, pour moi la méthode paint ne devrait être appelée qu'une seule fois au milieu de mon main.
    Le code ci-dessous fait un cercle, met la raquette dedans, puis écoute les touche clavier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    import java.awt.*;
    import javax.swing.*;
    import  java.awt.event.*;
     
    public class Frame1 extends JPanel implements KeyListener{  
     
    	private static Dimension tailleFenetre;
    	private Arene Ar1;
    	private Raquette Ra1;
    	private static JFrame fenetre;
    	private static Frame1 obj;
    	public void dessin(){} 
     
    	public void paint(Graphics g){
     
    		g.drawLine(100,100,200,330);//dessinner une ligne
    		System.out.println("salut");
    		g.setColor(Color.blue);
    		Ar1 = new Arene();
    		Ar1.setCentre(new Point(tailleFenetre.width/2,tailleFenetre.height/2));
    		Ar1.setRayon(tailleFenetre.height/2);
    		Ar1.drawCircle(g,Ar1.getCentre().x, Ar1.getCentre().y, Ar1.getCentre().y);
    		g.setColor(Color.red);
    		Ra1 = new Raquette();
    		Ra1.setPosition(Ar1);
    		Ra1.rect();
    		g.fillPolygon (Ra1.x, Ra1.y, 4) ;
    	}
    	public  static  void    main(String args[]){
    		fenetre=new JFrame("Dessin");
    		obj=new Frame1();
    		Toolkit leKit = fenetre.getToolkit();
    		tailleFenetre = leKit.getScreenSize();
    		fenetre.setBounds(0, 0, tailleFenetre.width, tailleFenetre.height);
    		System.out.println("Dé...");
    		fenetre.add(obj);
    		fenetre.addKeyListener (obj) ; 
    		fenetre.setVisible(true);
    		System.out.println("...bile");
     
    	}
     
    	public void keyTyped ( KeyEvent e ){  
    	    System.out.println("Key Typed "+e.getKeyChar());
    	}  
    	public void keyPressed ( KeyEvent e)  {  
    		System.out.println ( "Key Pressed "+e.getKeyChar() ) ; 
    		}
     
    	}  
    	public void keyReleased ( KeyEvent e ){  
    		System.out.println( "Key Released" ) ; 
    	}  
     
    }
    Comme vous l'aurez deviné j'essaye de faire bouger ma raquette suivant la touche pressée, mon problème, il me faudrait une fonction tel que paint qui pourrait redessiner le tout. Je ne demande pas qu'on me refasse tout le code, je pense qu'il me manque juste certaines notions.
    Des solutions?

  2. #2
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par Neotaxi Voir le message
    Je suis débutant en Java et en Swing, ayant toujours programmé en C je
    salut et bienvenue au monde Java.
    un peu de théorie :

    Méthodes paintComponent et repaint

    En Swing, c'est dans cette méthode que doit être fait les dessins d'un composant. Cette méthode est définie dans la classe JComponent. C'est en redéfinissant cette méthode que l'on peut ajouter des instructions de dessin

    En AWT, la méthode paintComponent n'existe pas et c'est la méthode paint qui doit être redéfinie pour ajouter du dessin. En Swing, la méthode paint existe encore mais elle ne doit pas être redéfinie.

    Par défaut, la méthode paintComponent appelle la méthode ComponentUI.update() qui efface et redessine le fond si le composant est opaque (comme JPanel par défaut). Lorsque la méthode paintComponent est redéfinie, la méthode de la classe mère doit être appelée par super.paintComponent pour conserver l'appel à ComponentUI.update().

    donc, faut plus utiliser la méthode paint()

    la méthode paintComponent reçoit en paramètre un objet de type Graphics mais la classe réelle de ce contexte graphique est toujours Graphics2D. Afin de pouvoir utiliser toutes les possibilités du graphisme de Java 2, il faut le convertir en un objet de type Graphics2D.

    En tenant compte des dernières remarques, une redéfinition de la méthode paintComponent prend la forme classique suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void paintComponent(Graphics g) 
    {
        // Appel de la méthode paintComponent de la classe mère
        super.paintComponent(g);
        // Conversion en un contexte 2D
        Graphics2D g2 = (Graphics2D) g;
        // Utilisation de g2
        ...
    pour appler paintComponent() et faire le rafraichissement du dessin(si tu as fais des chagements prés), tu dois appeler la méthode repaint().
    voila.
    quelques lien :
    http://java.developpez.com/faq/gui/?...general_dessin
    http://raphaello.univ-fcomte.fr/ig/java2d/Java2D.htm
    http://duj.developpez.com/tutoriels/java/dessin/intro/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 47
    Par défaut
    Merci beaucoup. J'aurais donc mélangé du AWT et du Swing.
    Je vais voir ce que je peux faire à partir de ton aide et des liens.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'affichage avec la fonction paint
    Par Fleur du Pays dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 11/02/2011, 20h33
  2. Appel de la fonction paint
    Par laurentze dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 07/01/2010, 14h47
  3. [JTable] s'efface si je crée la fonction paint()
    Par brunoperel dans le forum Composants
    Réponses: 5
    Dernier message: 25/01/2008, 15h34
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo