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 :

Dessiner en java avec plusieurs classes


Sujet :

2D Java

  1. #1
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut Dessiner en java avec plusieurs classes
    Bonjour,

    Dans le cadre de mes études je dois developper un Mini Atelier de Genie Logiciel.. enfin bref.
    Je dois dessiner un petit rectangle dans un JPanel symbolisant une entité.

    J'ai plusieurs classes :
    - entite.java
    où j'ai mon dessin dans la méthode paint :

    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
     
        public void paint(Graphics g) {
     
     
                    g.setColor(Color.BLACK);
                    g.drawRect(10,10,100,150);
                    g.drawLine(10,40,110,40);
                    g.setColor(Color.GRAY);
                    g.drawLine(25,9,111,9);
                    g.drawLine(111,10,111,145);
                    g.drawLine(25,8,111,8);
                    g.drawLine(112,10,112,145);
                    g.drawLine(25,7,111,7);
                    g.drawLine(113,10,113,145);
     
        }
    Et le JPanel dans lequel je voudrai afficher ce dessin se trouve dans Agl.java :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (e.getSource()==Dessin)
    {
     
    // Faire le dessin 
     
    }
    Comment puis je faire le plus simplement possible pour dessiner mon entité ?

    J'ai fait quelques tutoriel mais je ne trouve pas ce que je veux.


    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    J'avoue ne pas comprendre ton problème. Et c'est peut etre la meme chose pour les gens ayant lu de meme ton post.
    Essaye de preciser ton problème.
    Problème de modélisation? De maitrise du langage Java? De l'API Java?

  3. #3
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    et bien jessaye juste de dessiner mon tit rectangle dans mon container qui se trouve dans agl.java et je ne vois aps comment faire ..

  4. #4
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Je sais pas si tu t'y prend correctement. Pour pouvoir dessiner dans un JPanel il faut que tu redéfinisse la méthode paint comme tu l'a fait. Mais tu ne peut la redéfinir qu'a l'endroit ou tu as ton JPanel (donc dans la même classe qui étend JPanel).

    En espérant t'aider

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    Moi je surchagerait la methode paint de ton JPanel en question.
    Apres si ton problème est de ne pas le faire en 'dur', il suffit que ton JPanel customisé est acces à une collection d'objets contenant les objets (les entites dans ton cas) qu'il doit dessiner.

    En fait, c'est exactement ce que fais l'interface graphique lors d'un ajout d'un composant à un composant parent. Une alternative plus compliquée serait donc de creer des entites JComponent par heritage. Puis après de se servir de l'API deja présente.

    Precision : La methode paint du parent appelle la methode paint des composants contenus avec le meme graphique.

  6. #6
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    Ok donc si je passe le JPanel en parametre a la methode paint dans entite.java c'est une solution non ?

  7. #7
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Non la méthode paint doit être refénie dans la classe qui etend JPanel (Agl.java si j'ai bien suivi) et c'est le code de cette méthode qui sera executé lors du rafraichissement du panel.

  8. #8
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    oki oki,

    bon je viens de coder un truc qui marche a peu pres :
    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
     
            //Si on clique sur MCD
            if(e.getSource() == MCD){
            FS.setVisible(false);
     
            FS=new JPanel(new BorderLayout()); 
     
            FS.setLayout(null);// On applique le layout
            FS.setBackground(Color.white);//couleur de fond
            FS.setBorder(new EtchedBorder(50,Color.black,Color.white));
            FS.setBounds(280,20,largeur-290,hauteur-80);
     
     
            container.add(FS);
     
            texte = new JLabel() ;//On crée notre objet
            texte.setPreferredSize(new Dimension(250,25)) ;//On lui donne une taille
            texte.setBounds(350,10,800,25);//position relative à i
            texte.setText(" Modele Conceptuel De Données"); //On lui donne un texte qui contient les résultats
            FS.add(texte);
     
     
     
     
            Entite Ent = new Entite("titre","clé",FS);
            g = FS.getGraphics() ; // on recupere le contexte graphique du panel
            Ent.paint(g);
     
     
            }

    FS étant mon JPanel ou je veux afficher mon dessin
    Ent l'instance de entite.java qui contiant mon dessin :

    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
     
        public void paint(Graphics g) {
     
     
                    g.setColor(Color.BLACK);
                    g.drawRect(10,10,100,150);
                    g.drawLine(10,40,110,40);
                    g.setColor(Color.GRAY);
                    g.drawLine(25,9,111,9);
                    g.drawLine(111,10,111,145);
                    g.drawLine(25,8,111,8);
                    g.drawLine(112,10,112,145);
                    g.drawLine(25,7,111,7);
                    g.drawLine(113,10,113,145);
     
     
        }

    g un objet de type graphics

    voici le constructeur de entite.java :
    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
     
    public class Entite extends JPanel {
        // données
          // données interne
        String Titre;
        String PrimaryKey;
        String[] Attribut;
        int MAX_ATT=100;
            //données graphiques
        int hauteur;
        int largeur;
        Graphics g;
        JPanel p;
     
        /** Creates a new instance of Entite */
        public Entite(String t,String p,JPanel pa) {
     
            this.p=pa;
            this.g=g;
            Titre=t;
            PrimaryKey=p;
            Attribut=new String[MAX_ATT];
            hauteur=50;
            largeur=t.length()*4;
     
     
        }


    Mon probleme :

    Lorsque je clique sur MCD il affiche bien mon dessin mais pendant un court instant puis s'efface tout de suite ... pourquoi ?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Par défaut
    On repete : il faut surcharger la methode paint de ton JPanel.

    Car la tu dessine une seule fois, mais des que la surface est repainte tu ne redessine pas, et donc cela "s'efface".

    Pour des exemples :
    http://java.sun.com/products/java-me...ite/index.html

    Voici le code correspondant a mon post precedant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Collection entites = ... // ce que tu veux
    JPanel tonJPanel = new JPanel() {
        void paint(Graphics g) {
           // itere sur la collection
                // dessine l'element de la collection 
        }
    });
    Edit :L'indentation aide à lire. Et tu a le droit (le devoir meme) d'utiliser des modificateurs de portées :
    http://java.developpez.com/faq/java/...motsClesPublic

  10. #10
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    oui oki, mais il n'y a pas une autre technique si je ne veux pas que les lignes de code pour faire le dessin ne sont pas dans la classe qui contient mon JPanel ?

  11. #11
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Non il n'y a pas d'autre méthode mais à l'interieur de ta méthode paint tu peut faire appel à des méthode d'autre objet

  12. #12
    Membre éclairé Avatar de keub51
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 349
    Par défaut
    bon voila :

    j'ai crée une CollectionEntite de la maniere suivante :
    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
     
    public class CollectionEntite {
     
       String[] tab=new String[100];
       LinkedList l;
     
        /** Creates a new instance of CollectinEntite */
        public CollectionEntite() throws SQLException {
          bdd BD=new bdd();
          tab = BD.ListEntite();
     
     
          for(int i=0;i<tab.length;i++)
          {
              String nom_entite =tab[i];
              String nom_cle_primaire = BD.selectEntPKey(tab[i]);
              Entite E = new Entite(nom_entite,nom_cle_primaire);
              E.AddArrayAttribute(BD.Attribute(nom_entite));          
     
              l.addLast(E);
            }
          BD.fin_connexion();    
        } 
    }
    dans mon Agl ( la ou je veux afficher mon tit dessin ) j'ai instancé cette classe de la maniere suivante :
    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
     
            if(e.getSource() == AffEnt){
     
     
               try {
     
                    CollectionEntite C= new CollectionEntite();
                    Iterator I= C.l.iterator();
                    while(I.hasNext())
                    {
                      System.out.println("entite");
                    }
     
     
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
     
     
     
            }
    il crée donc une liste d'entite dont voici le constructeur :

    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
    public class Entite extends JPanel {
        // données
          // données interne
        String Titre;
        String PrimaryKey;
        String[] Attribut;
        int MAX_ATT=100;
            //données graphiques
        int hauteur;
        int largeur;
     
     
        /** Creates a new instance of Entite */
        public Entite(String t,String p) {
     
     
            Titre=t;
            PrimaryKey=p;
            Attribut=new String[MAX_ATT];
            hauteur=50;
            largeur=t.length()*4;
     
     
        }
    donc jaimerais dessiner de la maniere suivante toute les entitées contenue dans la collection d'entitées

    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
        public void paint(Graphics g) {
     
     
                    g.setColor(Color.BLACK);
                    g.drawRect(10,10,100,150);
                    g.drawLine(10,40,110,40);
                    g.setColor(Color.GRAY);
                    g.drawLine(25,9,111,9);
                    g.drawLine(111,10,111,145);
                    g.drawLine(25,8,111,8);
                    g.drawLine(112,10,112,145);
                    g.drawLine(25,7,111,7);
                    g.drawLine(113,10,113,145);
     
     
        }

    Comment puis je faire ( merci d'avoir de la patience lol )

  13. #13
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 909
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par TabrisLeFol
    On repete : il faut surcharger la methode paint de ton JPanel.
    Pour etre precis il est plus que conseille de surcharger protected void paintComponent(Graphics g) plutot que public void paint(Graphics g).



    Eh bien il te faut dans ton panel une reference sur ta collection de forme et l'appeller depuis la redefinition de paintComponent(). Ou est le probleme ?

    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
    import java.awt.*;
    import java.awt.image.*;
    import javax.swing.*;
     
    public class Entite extends JPanel {
     
        [...]
     
       /** {@inheritDoc}
       */
      @Override protected void paintComponent(Graphics g) {
        Insets insets = getInsets();
        Dimension size = getSize();
        Graphics2D g2d = (Graphics2D)g.create(insets.left, insets.top, size.width-(insets.left+insets.right), size.height-(insets.top+insets.bottom));
        try {
           ......
        }
        finally {
          g2d.dispose();
        }
      }
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. [JViews] dessiner un polyLine avec plusieurs stroke
    Par traiangueul dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 26/04/2010, 17h03
  2. Réponses: 4
    Dernier message: 12/07/2009, 22h18
  3. [Artichow] Dessiner une courbe avec plusieurs couleurs
    Par m_jaz3 dans le forum Bibliothèques et frameworks
    Réponses: 13
    Dernier message: 03/11/2008, 16h26
  4. Programme Java avec la classe Terminal
    Par ginos dans le forum Langage
    Réponses: 6
    Dernier message: 05/05/2008, 16h07
  5. [VS2005] comment organiser une solution avec plusieurs classes
    Par mahboub dans le forum Visual Studio
    Réponses: 1
    Dernier message: 15/04/2008, 10h49

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