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

avec Java Discussion :

Petite question sur l'héritage


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Petite question sur l'héritage
    Bonjour!

    J'ai une petite question sur un point que j'ai pas tout à fait saisi :

    J'ai une class qui hérite de la classe JFrame pour créer une fenêtre:
    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
     
    public class Viewer extends JFrame { 
     
    	private JPanel westPanel;
    	private JTree tree;
     
        /** Creates a new instance of Viewer */
        public Viewer() {
        	setSize(640,480);
            setLayout(new BorderLayout());
            setTitle("Viewer"); 
        	initComponents();
        }
     
     
        public void initComponents() {
     
        	westPanel = new JPanel();
        	westPanel.setBackground(Color.BLACK);
        	tree = new JTree(new TreeView(this, sampleTree()));
        	westPanel.add(tree);
     
        }
     
        /* main */
        public static void main(String[] args) { 
            new Viewer().show(); 
        }
     
    }
    Donc voilà, je crée une fenêtre, je l'initialise, et dedans je voudrais mettre un arbre qui serait créé a partir d'une autre classe (TreeView)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    JTree jTree = new JTree(new TreeView(this, sampleTree()));
    Voici ma classe TreeView :
    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
     
    public class TreeView implements TreeNode {
     
    	private Viewer viewer;
    	private DefaultMutableTreeNode treeNode;
     
    	public TreeView (Viewer viewer, DefaultMutableTreeNode treeNode) {
    		super();
    		this.treeNode = treeNode;
    		this.viewer = viewer;
    	}
     
        /* Generate a random tree */
        public DefaultMutableTreeNode sampleTree() {
        	DefaultMutableTreeNode root = new DefaultMutableTreeNode("root",true);
        	DefaultMutableTreeNode temp = new DefaultMutableTreeNode("temp");
        	Random r = new Random();
        	int i = r.nextInt(5)+2;
        	int j;
        	for (int x = 1; x <= i; x++) {
        		j = r.nextInt(5)+2;
        		temp = root.getFirstLeaf();
        		for (int y = 1; y <= j; y++) {
        			temp.add(new DefaultMutableTreeNode(x+"."+y));
        		}
        	}
        	return root;
        }
    }
    Quand je lance mon programme, j'obtiens ceci :

    Il m'affiche l'adresse ou je sais pas quoi de l'arbre, et pas l'arbre créé par la méthode sampleTree() !

    Ou ais-je faux ? :O
    Images attachées Images attachées  

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 136
    Points
    136
    Par défaut
    Salut,

    J'ai l'impression que tu fais appel à la méthode sampleTree de l'objet TreeView sans utiliser d'instance de TreeView.
    En fait ce code me semble bizarre puisque pour créer ton objet TreeView tu as besoin d'une méthode de cet objet ; or tu ne peux appeler cette méthode qu'après avoir créer l'objet.

    Je te propose d'enlever le DefaultMutableTreeNode du constructeur et de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tree = new JTree(new TreeView(this).sampleTree());
    La méthode sampleTree ne retourne rien mais initialise le treeNode
    "Je sais que je suis un geek depuis que j'utilise le timer de mIRC pour faire cuire des pâtes"

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Hmm, j'ai essayé d'améliorer le code et voici ce que j'obtiens:

    MaFrame.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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    import java.awt.GridLayout;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTree;
     
    @SuppressWarnings("serial")
    public class MaFrame extends JFrame {
     
    	private JPanel westPanel;
     
        public MaFrame () {
     
        	setSize(640,480);
        	setTitle("MaFrame ");
        	setVisible(true);
            setLayout(new GridLayout(1,1));
     
        	initComponents();
     
            addWindowListener(new java.awt.event.WindowAdapter() {
                public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); }
            });
     
        }
     
        public void initComponents() {
        	add(getWestPanel());
     
        }
     
        public JPanel getWestPanel() {
        	TreePanel ltp = new TreePanel();
        	westPanel = new JPanel();
        	westPanel.add(ltp.getTree());
        	return westPanel;
        }
     
        /* Exit on close */
        private void exitForm(java.awt.event.WindowEvent evt) { closeApp(); }
        public void closeApp() {
        	System.exit(0);
        }
     
        public static void main(String[] args) {
        	new MaFrame();
        }
     
    }
    MonTree.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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    import javax.swing.JTree;
    import javax.swing.tree.*;
     
    @SuppressWarnings("serial")
    public class TreePanel {
     
    	private JTree tree = null;
     
    	public TreePanel() {
     
            DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
     
    		createNodes(root);
     
    		tree = new JTree(root);
     
    	}
     
    	private void createNodes(DefaultMutableTreeNode root) {
    		System.out.println("Creating Nodes...");
    		DefaultMutableTreeNode child1, child2, child3;
     
    		child1 = new DefaultMutableTreeNode("1"); root.add(child1);
    		child2 = new DefaultMutableTreeNode("2"); root.add(child2);
    		child3 = new DefaultMutableTreeNode("3"); root.add(child3);
     
    	}
     
    	public JTree getTree() {
    		return tree;
    	}
     
    	public void setTree(JTree tree) {
    		this.tree = tree;
    	}
     
    }
    Lorsque je lance mon programme, ma JFrame s'affiche bien, mais rien ne s'affiche à l'intérieur (pas de JTree).
    Where's the bug ?

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2009
    Messages : 112
    Points : 136
    Points
    136
    Par défaut
    T'as essayé en mettant le setVisible(true) après le initComponents() ?
    "Je sais que je suis un geek depuis que j'utilise le timer de mIRC pour faire cuire des pâtes"

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Et ben merci à toi! Le setVisible était bel et bien mal placé

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

Discussions similaires

  1. [Débutant] Petite question sur l'héritage
    Par takinelinfo dans le forum C#
    Réponses: 7
    Dernier message: 22/06/2011, 17h16
  2. Petite question sur les héritages?
    Par razonback dans le forum C++
    Réponses: 4
    Dernier message: 15/02/2009, 16h13
  3. Réponses: 8
    Dernier message: 25/03/2008, 22h59
  4. petite question sur l'héritage et les cast
    Par baedal dans le forum Langage
    Réponses: 3
    Dernier message: 29/02/2008, 01h48
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 14h49

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