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

AWT/Swing Java Discussion :

communication entre vue et controleur


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Par défaut communication entre vue et controleur
    Bonjour;

    J'ai une vue composée d'un tableau (defaultModelTable) avac 5 boutons pour afficher, créer et supprimer des personnes.
    Je souhaite savoir comment transmettre les rowdata au controleur qui implémente un listenerAction (événements sur les boutons) par exemple comment récupérer la liste des personnes ID selectionnés par l'utilisateur (check box et clique sur le bouton supprimer).
    Et inversement lorsque le contrôle récupére par exemple la liste des personnes à afficher comment il transmet cette liste de data à une table ?


    Merci

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    salut,
    donc tu utilise une DefaultTableModel, auquel tu passe surement une liste de personnes, et s'est ton DefaultTableModel qui gère l'affichage...
    moi ce que je ferais c'est d'abord mettre un écouteur sur la liste, c'est à dire dans ta classe MyDefaultTableModel :
    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
     
    public class MyDefaultTableModel extends DefaultTableModel {
      private List listModel;
      public MyDefaultTableModel(List listModel) {
        this.listModel = listModel;
        listModel.addDataListener(new BridgeListener());
    ...
      }
     
    //..tes méthodes getValue... getClass....
     
    //ensuite toujourrs dans ta classe tu fais une classe BridgeListener
      public class BridgeListener implements ListDataListener {
        public void intervalAdded(ListDataEvent e) {
          final ListDataEvent event = e;
          eventQueue.invokeLater(new Runnable() {
            public void run() {
               // Rafraichit la vue
               fireTableRowsInserted(event.getIndex0(),event.getIndex1());
            }
          });
        }
        public void intervalRemoved(ListDataEvent e) {
          final ListDataEvent event = e;
          eventQueue.invokeLater(new Runnable() {
            public void run() {
               // Rafraichit la vue
               fireTableRowsDeleted(event.getIndex0(),event.getIndex1());
            }
          });
        }
        public void contentsChanged(ListDataEvent e) {
          final ListDataEvent event = e;
          eventQueue.invokeLater(new Runnable() {
            public void run() {
               // Rafraichit la vue
               fireTableStructureChanged();
            }
          });
        }
      } // Fin de la classe BridgeListener
     
    }
    donc avec cette classe BridgeListener, si tu supprime un élément de ta liste permettant l'affichage de ta table, ta table sera mise à jour automatiquement.
    Maintenant comment récupérer tes ligne sélectionné
    moi j'utiliserais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int[] index = table.getSelectedRows();
    par contre se sera les lignes sélectionnées normalement on ne prend pas en compte ton chekBox... donc la je ne sais pas comment faire, j'ai une solution mias je ne suis pas sur que ce soit tres propres... genre tu crées une table qui extends JTable et tu surcharges la méthode getSelectedRows() pour qu'il te renvoie la ligne sélectionnée grace au chekbox...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 428
    Par défaut
    Citation Envoyé par lilou77
    salut,
    donc tu utilise une DefaultTableModel, auquel tu passe surement une liste de personnes, et s'est ton DefaultTableModel qui gère l'affichage...
    moi ce que je ferais c'est d'abord mettre un écouteur sur la liste, c'est à dire dans ta classe MyDefaultTableModel :
    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
     
    public class MyDefaultTableModel extends DefaultTableModel {
      private List listModel;
      public MyDefaultTableModel(List listModel) {
        this.listModel = listModel;
        listModel.addDataListener(new BridgeListener());
    ...
      }
     
    //..tes méthodes getValue... getClass....
     
    //ensuite toujourrs dans ta classe tu fais une classe BridgeListener
      public class BridgeListener implements ListDataListener {
        public void intervalAdded(ListDataEvent e) {
          final ListDataEvent event = e;
          eventQueue.invokeLater(new Runnable() {
            public void run() {
               // Rafraichit la vue
               fireTableRowsInserted(event.getIndex0(),event.getIndex1());
            }
          });
        }
        public void intervalRemoved(ListDataEvent e) {
          final ListDataEvent event = e;
          eventQueue.invokeLater(new Runnable() {
            public void run() {
               // Rafraichit la vue
               fireTableRowsDeleted(event.getIndex0(),event.getIndex1());
            }
          });
        }
        public void contentsChanged(ListDataEvent e) {
          final ListDataEvent event = e;
          eventQueue.invokeLater(new Runnable() {
            public void run() {
               // Rafraichit la vue
               fireTableStructureChanged();
            }
          });
        }
      } // Fin de la classe BridgeListener
     
    }
    donc avec cette classe BridgeListener, si tu supprime un élément de ta liste permettant l'affichage de ta table, ta table sera mise à jour automatiquement.
    Maintenant comment récupérer tes ligne sélectionné
    moi j'utiliserais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int[] index = table.getSelectedRows();
    par contre se sera les lignes sélectionnées normalement on ne prend pas en compte ton chekBox... donc la je ne sais pas comment faire, j'ai une solution mias je ne suis pas sur que ce soit tres propres... genre tu crées une table qui extends JTable et tu surcharges la méthode getSelectedRows() pour qu'il te renvoie la ligne sélectionnée grace au chekbox...
    Salut;

    Merci pour la réponse.
    Par contre je ne vois ds le code le passage de la liste des personns à DefaultTableModelauquel ?
    Mon controleur ActionListener se trouve ds un autre package car j'ai séparé tout ce qui vraiment de l'IHM avec les actions.
    Je ne sais pas si cette séparation posera des pbs ?
    Supposons que j'ai les lignes sélectionnées comment je donne cette liste au controleur ? J'imagine que j'ai un tableau de string ? Il faut que je récupére l'ID de chaque personne et appeller la procèdure stockée pour le supprimer dans la base.

    Merci

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/02/2014, 15h26
  2. Communication entre Wizard et Vue
    Par jojodu31 dans le forum SWT/JFace
    Réponses: 0
    Dernier message: 09/06/2009, 15h17
  3. Communication entre application et vue/viewstack
    Par alain31tl dans le forum Flex
    Réponses: 5
    Dernier message: 09/05/2009, 17h33
  4. Communication entre les vues
    Par beb30 dans le forum MFC
    Réponses: 3
    Dernier message: 18/04/2006, 15h01
  5. communication entre programmes
    Par jérôme dans le forum C
    Réponses: 12
    Dernier message: 16/04/2002, 08h05

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