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 :

Listener sur class modèle


Sujet :

Java

  1. #1
    Membre confirmé Avatar de Kihmé Xs
    Inscrit en
    Janvier 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 549
    Points : 491
    Points
    491
    Par défaut Listener sur class modèle
    Bonjour à tous,

    Je me demandais si je pouvais faire une écoute sur certaines classes de mon modèle afin de savoir quand leur constructeur est appelé?

    Je ne vois cependant pas trop comment m'y prendre car je n'ai aucune idée du type d'event qui sera déclenché.

    Quelqu'un peut m'en dire plus?

    Cordialement,

    Kihmé

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Points : 191
    Points
    191
    Par défaut
    Salut,

    J'avou que je saisi pas bien ton problème... Un listener s'applique sur un élément graphique, et t'associe une fonction en cas de changement de cet élément.
    Dans le cas d'un constructeur t'as juste à appeler ta fonction dedans...

    Bref si tu veux que la fonction toto() se déclenche quand tu construits l'objet tata, ben tu mets un appel à toto() dans le constructeur de tata...
    On apprend plus en répondant aux questions qu'en les posant.

  3. #3
    Membre confirmé Avatar de Kihmé Xs
    Inscrit en
    Janvier 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 549
    Points : 491
    Points
    491
    Par défaut
    Je cherche à détecter un changement dans mon modèle. Vu ta proposition de mettre un appel dans mon constructeur j'en déduis que tu as en fait compris ce que je souhaitais faire.

    Pourquoi je ne souhaite pas passer par un appel dans mon constructeur?

    Et bien car c'est un comportement que je souhaite implémenter pour un grand nombre de classe, pour faire ça proprement je souhaite rendre ce comportement sur une échelle plus globale.

    Du coup je me dis que peut être avec le pattern observer je peux arriver à quelque chose comme ça, non?

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ton modèle, c'est un Modèle de quoi (de données, de JTable, d'avion)?
    Si tu n'expliques pas ton contexte, tu n'obtiendras probablement pas de réponse satisfaisante...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Points : 1 212
    Points
    1 212
    Par défaut
    Bonjour,

    Est-ce que ce genre de choses répondrait à ton besoin ?

    1°) Faire une classe parente avec dans le constructeur, la fonction a appelé.
    2°) Toutes les autres classes devant avoir le même comportement héritent de celle ci-dessus.

    Code MaClasseParent.java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class MaClasseParent {
         // Constructeur
         public MaClasseParent() {
              maFonction();
         }
    }

    Code MaClasseFille.java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class MaClasseFille extends MaClasseParent {
         // Constructeur
         public MaClasseFille() {
              // Appel du constructeur de MaClasseParent
              super();
         }
    }

    En tout cas, je rejoins sinok, un peu plus d'explications pourrait aider les gens à comprendre ton problème.

    Mako.

  6. #6
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Salut,

    Tu peux peut etre redefinir le class loader. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class CustomClassLoader extends ClassLoader
    {
       public CustomClassLoader(ClassLoader parent)
       {
          super(parent);
       }
     
       @Override
       public Class<?> loadClass(String name) throws ClassNotFoundException
       {
          System.out.println("Loading " + name);
          return super.loadClass(name);
       }
    }
    Comme ca, tu pourras filtrer les classes chargées. Et pour utiliser ce class loader, il faut utiliser la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java -Djava.system.class.loader=monappli.CustomClassLoader monappli.Appli

  7. #7
    Membre confirmé Avatar de Kihmé Xs
    Inscrit en
    Janvier 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 549
    Points : 491
    Points
    491
    Par défaut
    Désolé d'être trop flou, je reprend.

    Quand je dis modèle, j'entends mes classes métiers qui sont dans mon modèle (pattern MVC).

    Pour certaines classes je souhaiterais déclencher une sérialisation lorsque de nouvelles instances de celles ci sont faites.

    Effectivement il y a la possibilité de faire un appel d'une méthode gérant la sérialisation directement dans chacun des constructeurs mais je ne pense pas que ce soit la solution la plus propre et la plus maintenable.

    Ce que me propose Mako serait déjà plus propre.
    J'avais pensé à une sorte de listener pour détecter un changement dans les classes métiers comme dans le pattern "observer".

    Entre ces deux solutions, laquelle serait la plus judicieuse?

  8. #8
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Le pattern Observer est fait pour toi...
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  9. #9
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par Kihmé Xs Voir le message
    Désolé d'être trop flou, je reprend.

    Quand je dis modèle, j'entends mes classes métiers qui sont dans mon modèle (pattern MVC).
    En même temps c'est le principe du pattern MVC ça.

    Un évènement sur la vue fait intervenir le controleur associé. Celui-ci modifie le modèle en conséquence. Le modèle annonce qu'il a été modifié à la vue (justement par un pattern Observeur par exemple). La vue étant branchée sur les données du modèle se met à jour.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Moi ce que je ferais à ta place, c'est de créer tes listeners et tes évènements.
    L'évènement se déclenchera lorsque un constructeur est appelé.

    Je te conseille ce tuto qui m'a beaucoup aidé lorsque j'avais le même genre de problème que toi : http://rom.developpez.com/java-listeners/

  11. #11
    Membre confirmé Avatar de Kihmé Xs
    Inscrit en
    Janvier 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Janvier 2007
    Messages : 549
    Points : 491
    Points
    491
    Par défaut
    ok merci bien, je vais y aller à coup de listeners

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/09/2009, 21h34
  2. Listener sur un bouton d'une autre classe
    Par toma03 dans le forum Débuter
    Réponses: 1
    Dernier message: 12/12/2008, 08h52
  3. Listener sur une classe "distante"
    Par delire8 dans le forum Général Java
    Réponses: 15
    Dernier message: 25/02/2008, 18h55
  4. Probleme Listener sur JSpinner ou dans class
    Par croc14 dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 28/03/2007, 09h37
  5. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 13h14

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