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

 Java Discussion :

Problèmes pour dessiner


Sujet :

Java

Vue hybride

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 25
    Par défaut Problèmes pour dessiner
    Bonjours, bon c'est la première fois que je touche aux dessin et autre truc graphique et je bute pour ce que je veux faire, donc svp ne riez pas.

    J'ai programmer un jeu de pendu dont l'ensemble est fonctionnel, il ne me reste que le dessin du bonhomme à faire.

    J'aimerais avoir plusieurs variable contenant un dessin dont une serait le support, une autre le support + la tête , une autre le support + la tête + le corps, etc.

    Sauf que a chaque fois j'ai une erreur de compilation, car le type semble incompatible avec le dessin. j'ai essayer Graphics, JComponent, mais ça ne fonctionne pas

    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
     
    public class Dessin extends JPanel
    {
     
    	protected JPanel dessinPendu;
    	protected Graphics pendu0;
     
    	public Dessin(Graphics pendu0)
    	{
    		this.pendu0 = pendu0;
    	}
    	public void setPendu0(Graphics pendu0)
    	{
    		this.pendu0 = pendu0;
    	}
    	public Graphics getPendu0()
    	{
    		return pendu0;
    	}
    	public void PaintComponent(Graphics g)
    	{
    		this.pendu0 = g.drawOval(0, 0, 100, 100);
    	}
     
    }
    En gros pendu 0 est un dessin, pendu 1 un autre, pendu 2 un autre etc.

    Quel type serait compatible avec les dessins ?

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 105
    Par défaut
    Je te propose dors et déja ce tutoriel.

    Ensuite il te suffit de trouver comment charger un bufferedimage.

    Et d'essayer de voir si tu peux arriver a tout mettre ensemble.

    Sinon tu peux utiliser aussi un simple jLabel qui servira d'afficheur d'image, mais ca reste limité.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 25
    Par défaut
    Ce qui veut dire qu'on ne peut pas affecter g.draw() à une variable ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    Voici une autre methode qui peut sembler un peut compliquée mais qui est tres pratique car on cree un objet dessin qui est abstrait avec une methode draw et des objets Support, Tete et Coprs qui etendent Dessin. Quand tu veux les afficher, tu appelles leur methode draw dans la methode paintComponent de ton JFrame et comme ceux sont tous des dessins tu peux faire une boucle du style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
     
    for(int i =0, i<tableauDessins.size();i++) {
              tableauDessins.get(i).draw(g)
    où tableauDessins est un tableau d'Objets Dessin


    Voici un code complet qui fonctionne pour bien comprendre :

    Objet Dessin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    import java.awt.*;
     
    public abstract class Dessin {
     
    	public abstract  void draw(Graphics g);
     
    }
    objet Support

    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
     
    import java.awt.geom.*;
    import java.awt.*;
     
    public class Support extends Dessin {
     
    	public void draw(Graphics g) {
    		Graphics2D g2 = (Graphics2D)g.create();
    		Color cc = g2.getColor();
    		g2.setColor(Color.black);
    		g2.drawLine(100,350,100,50);
    		g2.drawLine(50,350,150,350);
    		g2.drawLine(100,50,250,50);
    		g2.drawLine(250,50,250,100);
    		g2.setColor(cc);
     
    	}
    }
    objet Tete

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import java.awt.geom.*;
    import java.awt.*;
     
    public class Tete extends Dessin {
     
    	public void draw(Graphics g) {
    		Graphics2D g2 = (Graphics2D)g.create();
    		Color cc = g2.getColor();
    		g2.setColor(Color.red);
    		g2.drawOval(225,100,50,50);
    		g2.setColor(cc);	
    	}
    }
    objet Corps

    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
     
    import java.awt.geom.*;
    import java.awt.*;
     
    public class Corps extends Dessin {
     
    	public void draw(Graphics g) {
    		Graphics2D g2 = (Graphics2D)g.create();
    		Color cc = g2.getColor();
    		g2.setColor(Color.green);
    		g2.drawLine(250,150,250,175);
    		g2.drawLine(200,175,300,175);
    		g2.drawLine(250,175,250,275);
    		g2.drawLine(250,275,200,300);
    		g2.drawLine(250,275,300,375);
    		g2.drawLine(200,175,200,275);
    		g2.drawLine(300,175,300,275);
    		g2.setColor(cc);	
    	}
    }
    et fenetre d'affichage

    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
    57
    58
    59
    60
     
    import javax.swing.*;
    import java.awt.event.*;
    import java.awt.*;
    import java.util.*;
    public class Pendu extends JPanel implements ActionListener{
     
    	Dessin support = new Support();
    	Dessin tete = new Tete();
    	Dessin corps = new Corps();
    	JPanel panelNord = new JPanel();
    	JButton bouton = new JButton("dessiner");
    	LinkedList<Dessin> tableauDessins = new LinkedList<Dessin>();
     
     
    	public Pendu() {
    		panelNord.setOpaque(false);
    		panelNord.add(bouton);
    		bouton.addActionListener(this);
    		add(panelNord);
     
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		if (tableauDessins.size() == 0)
    			tableauDessins.add(support);
    		else if (tableauDessins.size() == 1)
    			tableauDessins.add(tete);
    		else if (tableauDessins.size() == 2)
    			tableauDessins.add(corps);
    		else if (tableauDessins.size() == 3){
    			tableauDessins.remove(support);
    			tableauDessins.remove(tete);
    			tableauDessins.remove(corps);
     
    		}
    		this.repaint();
    	}
     
    	public static void main(String[] args) {
    		JFrame jf = new JFrame();
    		Pendu p = new Pendu();
    		jf.setSize(600,500);
    		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		jf.add(p,BorderLayout.CENTER);
    		jf.setVisible(true);
    	}
     
    	public void paintComponent(Graphics g) {
    		Graphics2D g2 = (Graphics2D) g.create();
    		g2.setBackground(Color.white);
    		g2.clearRect(0,0,getWidth(),getHeight());
    		for(int i=0;i<tableauDessins.size();i++) {
    			tableauDessins.get(i).draw(g);
    		}
     
     
    	}
     
    }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 25
    Par défaut
    très compliqué effectivement. Ma tête va exploser, car je n'y capte absolument rien

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Par défaut
    En gros je crée 3 objets.

    Support, Tete et Corps.

    Chacun d'entre eux a une methode draw(Graphics g) qui permet de les dessiner dans le container de context graphic g.

    cette fonction draw doit être utilisée dans la méthode paintComponent() du container sur lequel on veut dessiner sinon des que java redessine le container il ne pourra pas refaire appel à draw et le dessin ne sera pas redessiné.

    ceci doit te permettre de dessiner tes objets.


    Maintenant si tu veux pouvoir effacer tes objets et/ou les reafficher, tu peux faire des tests dans la methode paintComponent du container mais c'est déconseillé. Il ne doit y avoir que de l'affichage dans paintComponent.

    Donc j'utilise un tableau que je mets à jour en fonction de ce que je veux afficher et dans la methode paintComponent je liste les objets du tableau et je les affiche.

    C'est la qu'intervient l'objet Dessin.
    Car je dois donner le type d'éléments de mon tableau et il ne peut pas y avoir plusieurs types(Support, Tete, Corps) Donc je m'arrange pour que mes 3 classes Support, Tete et Corps heritent de la même classe Dessin. Ainsi le type d'objets de mon tableau sera Dessin.

    Bon courage.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 25
    Par défaut
    problème résolu en vidant ma JFrame en appellant repaint() j'ai rien dit

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 25
    Par défaut
    Bon en tout cas merci à tous pour votre aide

Discussions similaires

  1. Problème pour dessiner un rectangle
    Par acheo dans le forum C#
    Réponses: 2
    Dernier message: 15/06/2012, 13h11
  2. [Chemfig] Problème pour dessiner une liaison
    Par DozerSux dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 11/10/2010, 16h41
  3. Problème pour dessiner.
    Par Clydopathe dans le forum C#
    Réponses: 3
    Dernier message: 05/02/2009, 09h45
  4. [Débutant] Problème pour dessiner une courbe
    Par torNAdE dans le forum MATLAB
    Réponses: 6
    Dernier message: 16/07/2007, 23h25
  5. Réponses: 7
    Dernier message: 04/06/2006, 18h00

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