Demande d'aide

Résolu
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007 - 5 avril 2007 à 09:13
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007 - 6 avril 2007 à 11:52
Bonjour et slt a ts

j'ai un probleme j'ai crée un classe mére qui me permet de remplir une liste chainé qui s'appele drawables apres
j'ai cree un classe fille qui hérite de cette classe mére,le probleme c
'est quand je veux exploiter la liste drawables ds ma classe fille je
trouve qu'elle est vide..

est ce que c'est un probleme d'heritage?

vous avez une idée sur que est ce qu'il faut faire?

voici une partie du code de la classe mére

public class JCanvas extends JPanel{

    public List drawables = new LinkedList();

       public void paint(Graphics g) {

        g.clearRect(0, 0, getWidth(), getHeight());//efface le dessin

        for (Iterator iter = drawables.iterator(); iter.hasNext();) {

            IDrawable d = (IDrawable) iter.next();

            d.draw(g);

        }

    }

    public void addDrawable(IDrawable d) {

        drawables.add(d);     //je remplie ma liste drawables

        repaint();

    }

et voici le code de la classe fille qui herite de la fonction mere:

public class gethirarchi1 extends JCanvas {


        private LinkedList k;

       

   

    public gethirarchi1() {

     

    }

        

   public void hirarchie1() {

      

        int y;

        k =(LinkedList) drawables;

         y=k.size();

      

        
System.out.println(y);//ici l'ecran m'affiche '0' bien evidement 

                   
                  //que la liste drawables n'est vide .     

    }

}

21 réponses

gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
5 avril 2007 à 11:25
Salut,

C'est bien ce que je disais..

Tu fais un add sur ton arbre...
Ensuite, tu crées un nouvel objet de type "verif"
Cet objet NE PARTAGE PAS sa LinkedList avec ton objet de type arbre
Chaque objet possède sa propre LinkedList

Pour faire court, tu as mal assimilé la notion d'héritage..Et essaie de mettre la première lette du nom de ta classe en majuscules... histoire de respecter certaines conventions de codage

gmi19oj19
3
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
6 avril 2007 à 10:25
Salut,

C'st parce qu'en déclarant ta variable statique, elle devient variable de classe, càd partagée par toutes les instances et également accessible partout.

gmi19oj19
3
lafolle24320 Messages postés 406 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 29 juin 2009 7
5 avril 2007 à 09:18
commence par mettre un sujet clair que les gens qui ne savent pas répondre évite de perdre leur temps à savoir pourquoi tu veux de l'aide. Ici tout le monde demande de l'aide!!!


a++

lafolle
0
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007
5 avril 2007 à 09:27
il est assez clair non ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007
5 avril 2007 à 09:29
j'ai fait le maximum ,a part s'il y une conseil je vous écoute?
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
5 avril 2007 à 09:33
Salut,

Balance aussi le code de test qui plante, parce que là on risque d'avoir dumal à t'aider...

gmi19oj19
0
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007
5 avril 2007 à 09:40
en fait ça marche le probleme c'est que dans la classe fille je trouve
ma liste est vide  alors qu'elle n'est pas vide c'est tout

et voici le code de la classe mére que j'ai trouvé sur le web:


public class JCanvas extends JPanel{

    public List drawables = new LinkedList(); 

    public void paint(Graphics g) {

        g.clearRect(0, 0, getWidth(), getHeight());//efface le dessin

        for (Iterator iter = drawables.iterator(); iter.hasNext();) {

            IDrawable d = (IDrawable) iter.next();

            d.draw(g);

        }

    }

    public void addDrawable(IDrawable d) {

        drawables.add(d);

       

        repaint();

    }

    public void removeDrawable(IDrawable d) {

        drawables.remove(d);

        repaint();

    }

    public void clear() {

        drawables.clear();

        repaint();

    }
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
5 avril 2007 à 09:42
Salut,

J'm'en fiche de ça.. ce que je veux voir, c'est le code de ta méthode main qui appelle les méthodes de ets classes mère & fille...

gmi19oj19
0
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007
5 avril 2007 à 09:50
ah ok le voila :


et voici le lien


 http://duj.developpez.com/tutoriels/java/dessin/intro/


public static void main(String[] args) {

     JCanvas jc = new JCanvas();

     jc.setBackground(Color.WHITE);

     jc.setPreferredSize(new Dimension(100,200));

     Dimension dim =new Dimension(20,20);

     IDrawable rect = new RectangleDrawable(Color.RED,new Point(10,10),dim);

     jc.addDrawable(rect);

     new SimpleMouseListener(jc);

     new MoveDrawableMouseListener(jc);

     GUIHelper.showOnFrame(jc,"test JCanvas ");

    

      }
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
5 avril 2007 à 10:31
Salut,

A aucun moment tu n'instancies un objet de ta classe fille, comment peut-il y avoir un problème ?
De plus, ta LinkedList est une variable d'instance, c'est à dire que chaque fois que tu fais un new JCanvas(), il possède sa propre LinkedList d'éléments dessinables...

En esperant avoir été clair ...

gmi19oj19
0
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007
5 avril 2007 à 10:32
Slt a ts.

j'ai crée un petit exemple sur l'heritage et j'ai tjrs le meme probleme
c-a-d dans la classe fille je trouve ma liste est vide  alors
qu'elle n'est pas vide .

voivi le code de la classe main


public class Main {

   

  

    public Main() {

    }

   

   

    public static void main(String[] args) {

        arbre ar = new arbre();

    }

   

}

voivi le code de la classe arbre


public class arbre extends javax.swing.JFrame {

    public List drawable =new LinkedList();

    public Rectangle R=new Rectangle();

    /** Creates new form arbre */

    public arbre() {

       initComponents();

       pack();

       setVisible(true);

    }

   

   


    private void     //Bouton permettant afficher le nbre

                            
//d'element   dela liste
 jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

   verif ver=new verif();

   ver.affiche();

    }


    private void    //Bouton permettant de remplir la liste   jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

  R.setBounds(20,20,20,20);
  drawable.add(R);

    }

   

  

    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {

                             


            }

        });

    }

   

    // Variables declaration - do not modify

    private javax.swing.JButton jButton1;

    private javax.swing.JButton jButton2;

    // End of variables declaration

   

}

voivi le code de la classe vérif qui hérite de la classe arbre

public class verif extends arbre{

   

    int x;

   

    /** Creates a new instance of verif */

    public verif() {

     

    }

   public void affiche()

   {

       x=drawable.size();

       System.out.println(x);

   }

}

        Personne n'a une idée   
0
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007
5 avril 2007 à 11:34
Merci pour la reponse satisfaisante

est ce qu'il y a moyen d'acceder a la liste que j'ai remplie dans ma classe mére avec une autre classe ??
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
5 avril 2007 à 11:42
Salut,

un petit public List getList() et c'est bon ^^

gmi19oj19
0
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007
5 avril 2007 à 11:53
Merci d'abord

je le mets a la place de ma LinkedList?dans la classe mére ou dans la classe fille?

excusez je suis encore debutant en java
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
5 avril 2007 à 12:05
Salut,

non non, tu gardes ta liste

Et tu rajoutes à ton code :

public List getList() { return drawables; }

Ainsi tu peux avoir acecs à ta liste (et donc au nmbre d'éléments) depuis d'autres classes

gmi19oj19
0
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007
5 avril 2007 à 14:37
Merci bien

je l'ai rajouté a ma classe fille mais ça ne marche pas!!

est qu'il faut ajouter un super() au constructeur de la classe fille?
0
gmi19oj19 Messages postés 545 Date d'inscription lundi 10 mai 2004 Statut Membre Dernière intervention 28 septembre 2011 2
6 avril 2007 à 09:41
Salut,

Non non, il faut que ce soit sur la classe mère, puisque c'est sur une instance de cette classe que tu fais tes add(). De toutes façons, la classe fille en héritera. Et si tu veux absolument utilisé une autre classe pour connaitre le nombre d'éléments de ta liste, il faut que celle ci ait un pointeur vers ton objet courant (lui passer en paramètre du constructeur quoi)... Mais honnêtement, une seule classe suffit pour ça et c'est pas le meilleur moyen d'apprendre à se servir de l'héritage...

gmi19oj19
0
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007
6 avril 2007 à 09:59
merci bien

en fait hier j'ai galéré mais ça a marché a la fin j'ai mis

(static List  ) a la place de (public list) ds les deux classe

c'est bizarre quand meme et je n'ai rien ajouter (pas de getlist)

pouvez vous me dire comment ça a marché?
0
javamen33 Messages postés 46 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 3 mai 2007
6 avril 2007 à 10:30
Merci bcp pour votre aide

l'utilisation des champs statiques ça ne pose aucun probleme?
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
6 avril 2007 à 11:31
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" />
<title>
</title>
<meta name="GENERATOR" content="OpenOffice.org 2.0 (Linux)" />
<meta name="AUTHOR" content="bob bob" />
<meta name="CREATED" content="20070406;11095800" />
<meta name="CHANGED" content="16010101;0" />
<style type="text/css">
<!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
-->
</style>
Salut,

l'utilisation de static
est fortement déconseillé...
pour illustrer le
problème lié à un champ ou une méthode
static voici une petite classe qui incrémente et affiche une varible static (teste le tu verras) :


public class Test {
    //création de la variable static
    private static int i = 10;
   
    //recupération de i
    private int getI(){
        return i;
    }
    //incrémentation de i
    private void increment(){
        ++i;
    }
   
    public static void main(String[] args) {
        //création des instances
        Test t1 = new Test();
        Test t2 = new Test();
        //affichage de i
        System.out.println("t1.getI() = " + t1.getI() + ", t2.getI()" + t2.getI());
        //on incrément le i de t1 (qui est le meme pour t2 vu que i est static)
        t1.increment();
        //affichage de i
        System.out.println("t1.getI() = " + t1.getI() + ", t2.getI()" + t2.getI());
        //tu remarques que i de t2 il a lui aussi été incrémenté
    }
}



En conclusion tu peux utiliser du static dans un code mais faut vraiment savoir ce que tu fais sinon tu risque d'avoir des effets non désirés.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Rejoignez-nous