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

Langage Java Discussion :

[Language][debutant] package et import : probleme


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut [Language][debutant] package et import : probleme
    Bonjour,

    j'ai (encore) un probleme!

    j'ai 1 repertoire super_rep.
    dedans, j'ai 2 repertoires: rep1 et rep2.
    dans rep1, j'ai plusieurs classes dont une qui contient une fonction lister().
    dans rep2, j'ai plusieurs classes dont une qui appelle la fonction lister().

    dans toutes mes classes de rep1, j'ai mis tout en haut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    package super_rep.rep1;
    import super_rep.*;
    dans toutes mes classes de rep2, j'ai mis tout en haut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    package super_rep.rep2;
    import super_rep.*;
    dans rep1, j'ai aussi une classe avec le main: qd j'appelle lister(), je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ma_classe mc = new ma_classe();
    //appel de lister()
    mc.lister();
    donc ma question est:
    dans une de mes classes de rep2, comment faire pour appeller lister() ?
    sachant que je veux que cette methode soit appliquée à l'instance de type ma_classe qu'il y a dans le main de rep1 (donc à mc car ds le main de rep1, j'ajoute peins de trucs ds mc donc je voudrais que mc soit conservé).

    voila, merci.

  2. #2
    Membre confirmé Avatar de calypso
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 102
    Par défaut
    As tu essaye dans rep1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    import super_rep.rep2.*;
    et vice-versa? en effet, l'importation de paquetages n'est pas recursive.

    Bon courage!

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    puisque dans toutes les classes de rep1 et ds ttes les classes de rep2, je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import super_rep.*;
    est ce que ce n'est pas equivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import super_rep.rep2.*;  //ds les classes de rep1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import super_rep.rep1.*;  //ds les classes de rep2
    ???

    en fait, si tous mes imports etaient corrects, est ce que je peux utiliser l'instance d'une classe de rep1 (celle que j'ai appelée mc) ds une classe de rep2 en gardant le meme nom mc et sans la redeclarer dans la classe de rep2?
    dc est ce que je peux faire ds la classe de rep2 :
    sans rien avoir ecrit d'autres sur mc ds la classe de rep2 (dc sans l'avoir redeclarée) ?

    merci

  4. #4
    Membre confirmé Avatar de calypso
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 102
    Par défaut
    Non, ca n'est pas equivalent. Tu essayeras de faire import java.*, et tu verras que ca n'importe pas toutes les classes de l'API

    Sinon, l'import va te permettre d'utiliser les methodes et champs statiques de la classe importee. en effet, il va chercher le .class. Je ne pense pas me tromper en disant que tu ne peux pas du tout faire ca.. par contre, dans rep2, tu peux redeclarer une instance et appeler lister() dessus.

    calypso

  5. #5
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Par défaut
    comme te l'as dit calypso,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import super_rep.*;
    n'est pas equivalent à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import super_rep.rep2.*;
    Dans le premier cas, seule les classes directement dans super_rep sont importees, mais l'import ne descend pas dans les sous repertoires de super_rep.

    Concernant l'utilisation de l'instance de ta classe mc, mc n'existe pas et n'est donc pas connu dans rep2. Si tu veux recuperer mc cree dans le main, tu dois le passer en parametre de ta classe qui se trouve rep2.
    J'espere que c'est comprehensible ce que je raconte...

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    deja, merci pr l'histoire des import: j'étais persuade que c'etait equivalent.

    mais j'ai tjs ce pb de l'instance mc de la classe main de rep1. Je voudrais réutiliser mc ds ma classe de rep2: c'est une classe pour un écouteur. j'ai seulement le constructeur de l'ecouteur et la methode ActionPerformed().

    si je mets mc en parametre du constructeur de l'ecouteur, il faut aussi que je le mette en parametre lors de la construction de l'ecouteur ds ma classe ihm principale (qui étend JFrame). mais je me retrouve avec le meme probleme. ds cette classe ihm principale, mc n'est pas déclarée. donc je ne sais pas à quel endroit il faut que je passe mc en parametre.

    mc sera le parametre de quelle methode ou de quel constructeur et ds quelle classe?

    vraiment désolé d'avoir à vous redemander des explications. mais je vois vraiment pas comment faire.
    merci

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Par défaut
    Montre moi le code de ta methode main, celui de ta classe ihm et de ton ecouteur pour voir ce qu'on peut faire.

  8. #8
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    slt

    voici le code de la classe contenant le main dans le repertoire rep1:
    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
     
    package projet.superrep.rep1;
    import projet.*;
     
    public class test {
     
    	public static void main (String [] args){
     
    	ma_classe mc = new ma_classe();
     
    	Ctt c1 = new Ctt ("0","1","2","3","4");
    	Ar a1 = new Ar (0, "string1",10,"string2");
    	Prs p1 = new Prs (a1,c1,"string3","string4");
     
    	Ctt c2 = new Ctt ("5","6","7","8","9");
    	Ar a2 = new Ar (1, "string5",20,"string6");
    	Prs p2 = new Prs (a2,c2,"string7","string8");
     
     
       mc.ajouter(p1);
    	mc.ajouter(p2);
    	mc.lister();
     
    	}
    }

    voici le code de la classe ihm dans le repertoire rep2 :
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    package projet.superrep.rep2;
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import projet.superrep.rep1.*;
     
     
    public class classeihm extends JFrame {
     
    private Container cp;
    private JPanel ecran;
    private JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18;
     
    	public classeihm(){
     
    		super("titre");
    		Container cp = getContentPane();
    		JPanel ecran = new JPanel(new BorderLayout()); 
    		String[] menu_ppal = {"menu 1", "menu 2"}; 
    		JList liste_menu_ppal = new JList(menu_ppal); 
    		ecran.add(liste_menu_ppal,BorderLayout.NORTH);
    		String[] menu_1 = {"a","b","c","d","e"}; 
    		JList liste_menu_1 = new JList(menu_1); 
    		String[] menu_2 = {"f","g","h","i"}; 
    		JList liste_menu_2 = new JList(menu_2); 
     
     
    		JButton b1 = new JButton ("");
    		JButton b2 = new JButton ("");
    	   JButton b3 = new JButton ("");
    		JButton b4 = new JButton ("");
    		JButton b5 = new JButton ("");
    		JButton b6 = new JButton ("");
    		JButton b7 = new JButton ("");
    		JButton b8 = new JButton ("");
    	   JButton b9 = new JButton ("");
    		JButton b10 = new JButton ("");
    		JButton b11 = new JButton ("");
    		JButton b12 = new JButton ("");
    		JButton b13 = new JButton ("");
    		JButton b14 = new JButton ("");
    		JButton b15 = new JButton ("");
    	   JButton b16 = new JButton ("");
    		JButton b17 = new JButton ("");
    		JButton b18 = new JButton ("");
     
    		JPanel jp = new JPanel(new GridLayout(4,3,5,5));
    		JPanel jp4 = new JPanel(new BorderLayout(5,5));
    		JPanel jp5 = new JPanel(new BorderLayout(5,5));
     
     
    		jp.add (b7);
    		jp.add (b8);
    		jp.add (b9);
    		jp.add (b10);
    		jp.add (b11);
    		jp.add (b12);
    		jp.add (b13);
    		jp.add (b14);
    		jp.add (b15);
    		jp.add (b16);
    		jp.add (b17);
    		jp.add (b18);
     
     
    		jp4.add("North",b3);
    		jp4.add("East",b6);
    		jp4.add("South",b4);
    		jp4.add("West",b5);
     
     
    		jp5.add("North",ecran);
    		jp5.add("East",b1);
    		jp5.add("South",jp);
    		jp5.add("West",b2);
    		jp5.add("Center",jp4);
     
    		cp.add("Center",jp5);
     
    		ecouteur1 e1 = new ecouteur1 (ecran, liste_menu_ppal, liste_menu_1, liste_menu_2);
    		b1.addActionListener(e1);
     
    		pack();
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setVisible(true);
     
    	}
    }
    voici le code de l'ecouteur e1 dans le repertoire rep2 :
    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
     
    package projet.superrep.rep2;
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.event.ActionEvent;
    import projet.superrep.rep1.*;
     
    public class ecouteur1 implements ActionListener{
     
     private JList jlmr, jlms,jlmp; 
     private JPanel ecran;
     
     
    public ecouteur1 (JPanel ecran, JList liste_menu_ppal, JList liste_menu_1, JList liste_menu_2){
    		this.ecran = ecran;
    		jlmp = liste_menu_ppal;
    		jlmr = liste_menu_1;
    		jlms = liste_menu_2;
    	 }
     
    public void actionPerformed(ActionEvent e){
     ecran.removeAll();
     if ((jlmp.getSelectedValue()).equals("menu 1")){
       ecran.add(jlmr,BorderLayout.NORTH);
       BorderLayout bdl=(BorderLayout)ecran.getLayout();
       bdl.addLayoutComponent(jlmr,BorderLayout.NORTH);
       ecran.revalidate();
     
       if ((jlmr.getSelectedValue()).equals("a")){
        //appel de la methode lister() sauf que mc n'est pas connu
       //c juste un test: ça doit m'afficher la liste des clés de la map
       System.out.println(mc.lister());   
       //en fait, ce que je voudrais, c'est mettre la liste des clés de la map
       //dans une JList jlnom pour pouvoir l'ajouter au JPanel ecran
      //donc 2 problemes:
      //1) il faut que mc soit connu dans cette classe
      //2) il faut que la liste des clés de la map soit mise sous forme d'une JList
       ecran.add(jlnom, BorderLayout.NORTH);
       BorderLayout bdl1=(BorderLayout)ecran.getLayout();
       bdl1.addLayoutComponent(jlnom,BorderLayout.NORTH);
       ecran.revalidate();
      }			
    }
     
    if ((jlmp.getSelectedValue()).equals("menu 2")){
      ecran.add(jlms,BorderLayout.NORTH);
      BorderLayout bdl2=(BorderLayout)ecran.getLayout();
      bdl2.addLayoutComponent(jlms,BorderLayout.NORTH);
      ecran.revalidate();
    }
     
    }
    }

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Par défaut
    Et tes classes ihm et ecouteur tu les instancies ou ?

  10. #10
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    je fais une classe ou il y a le main pour faire apparaitre l'interface graphique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    import projet.superrep.rep1.*;
    import projet.superrep.rep2.*;
     
    public class Testihm{
     
        public static void main (String [] args){
    	classeihm cihm = new classeihm();
        } 
    }

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 170
    Par défaut
    Ce que je te propose c'est de garder ta classe test et son main et d'y rajouter l'instanciation de la classe ihm en modifiant son constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    classeihm cihm = new classeihm(mc);
    tu passes donc en parametre de ton constructeur mc.
    ta classe ihm devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class classihm extends JFrame {
       private ma_classe mc_;
       ...
     
       public classihm(ma_classe mc) {
          mc_ = mc;
          ...
       }
    }
    maintenant, tu peux appeler mc_.lister();
    pour ton ecouteur t'as plus qu'a faire pareil.

  12. #12
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    merci beaucoup. ça fonctionne.
    j'ai fait le test d'affichage de ma liste des clés, dans ma classe ecouteur. et c'est bon.
    merci de ton aide.

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

Discussions similaires

  1. [SAX] [Debutant]package org.apache.xml.serialize
    Par Ashgenesis dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 25/01/2008, 09h31
  2. [debutant] signé un Japplet ! probleme :(
    Par daed dans le forum Applets
    Réponses: 3
    Dernier message: 06/03/2006, 18h53
  3. Réponses: 2
    Dernier message: 06/03/2006, 11h22
  4. [Language][débutant] "transient" où l'utiliser?
    Par rabobsky dans le forum Langage
    Réponses: 7
    Dernier message: 16/08/2005, 12h05
  5. [debutant][db2] timestamp format problem
    Par mlequim dans le forum DB2
    Réponses: 2
    Dernier message: 21/07/2005, 08h33

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