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 :

[Event] Lancer un évent de l'applicatif vers le GUI


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [Event] Lancer un évent de l'applicatif vers le GUI
    Bonjour tout le monde,

    Je vois beaucoup de gestion d'évènements partant de l'interface graphique (boutons, textfield, souris, ...) pour aller appeler une méthode de l'application.

    Mon problème est le suivant : j'ai une classe SERVEUR qui doit se connecter. Admettons que j'utilise un booléen isConnected qui indique que le serveur est connecté. J'aimerais qu'il y est un retour informatif sur le GUI du style, un label CONNECTE. Pour cela, je voudrais pouvoir lancer un évènement à partir du serveur qui soit récupéré par mon label d'information.
    Comment faire pour que cela soit coder proprement en MVC, sachant que j'ai déjà séparé les classes GUI de l'application? Faut-il créer des classes EventListener?

    J'espère que j'ai été clair.

    D'avance, merci pour vos réponses.

    HOLO.

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Oui, tu peux utiliser un EventListener et définir un Event. 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
    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
    public class ServerEvent extends java.util.EventObject {
     
      public final static int SERVER_CONNECTED = 0;
      public final static int SERVER_DISCONNECTED = 1;
     
      int serverState;
     
      public ServerEvent(Object source, int serverState) {
        super(source);
        this.serverState = serverState;
      }
     
      public int getServerState() {
        return serverState;
      }
    }
     
    public interface ServerListener extends EventListener {
        public void serverStateChanged(ServerEvent e);
    }
     
    public class Server {
      protected EventListenerList listenerList = new EventListenerList();
     
      public void addServerListener(ServerListener l) {
        listenerList.add(ServerListener.class, l);
      }
     
      public void removeServerListener(ServerListener l) {
        listenerList.remove(ServerListener.class, l);
      }
     
      public void fireServerStateChanged(ServerEvent e) {
        Object[] listeners = listenerList.getListenerList();
        for (int i = listeners.length-2; i >= 0; i -= 2) {
          if (listeners[i] == ServerListener.class) {
            ((ServerListener) listeners[i+1]).serverStateChanged(e);
          }
        }
      }
     
      ...
      // le serveur est connecté
      fireServerStateChanged(new ServerEvent(this, ServerEvent.SERVER_CONNECTED));
      ...
      // le serveur est déconnecté
      fireServerStateChanged(new ServerEvent(this, ServerEvent.SERVER_DISCONNECTED));
     
    }
     
    public class Gui ... implements ServerListener {
     
      Server server;
      JLabel serverStateLabel;
     
      ...
      server.addServerListener(this);
      ...
     
      public void serverStateChanged(ServerEvent e) {
        final String text = (e.getServerState() == ServerEvent.SERVER_CONNECTED)
          ? "Connecté"
          : "Déconnecté";
     
        SwingUtilities.invokeLater(new Runnable()  {
          public void run() {
            serverStateLabel.setText(text);
          }
        });
      }
    }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Herve91, je te remercie pour ta solution. Je vais la tester.

    Tout de même, je pensais que, grâce aux events, on pouvait éviter de passer une référence du Server au GUI.

    Je croyais qu'il était possible d'écouter un type d'évènement dans une classe sans avoir à passer une référence de la source de l'event. J'ai dû me tromper alors. :-)

    Merci encore.

    Holo

  4. #4
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Si tu veux éviter de passer une référence du Server au GUI, tu peux passer par un objet intermédiaire :
    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
    public class ServerEventDispatcher {
      private EventListenerList listenerList = new EventListenerList(); 
      private static ServerEventDispatcher instance = new ServerEventDispatcher();
     
      private ServerEventDispatcher() {}
     
      public static ServerEventDispatcher getInstance() {
        return instance;
      }
     
      public void addServerListener(ServerListener l) { 
        listenerList.add(ServerListener.class, l); 
      } 
     
      public void removeServerListener(ServerListener l) { 
        listenerList.remove(ServerListener.class, l); 
      } 
     
      public void dispathServerEvent(ServerEvent e) { 
        Object[] listeners = listenerList.getListenerList(); 
        for (int i = listeners.length-2; i >= 0; i -= 2) { 
          if (listeners[i] == ServerListener.class) { 
            ((ServerListener) listeners[i+1]).serverStateChanged(e); 
          } 
        } 
      } 
    }
     
    public class Server {
     
        ...
        // le serveur est connecté
        ServerEventDispatcher.getInstance().dispathServerEvent(new ServerEvent(this, ServerEvent.SERVER_CONNECTED)); 
    }
     
    public class Gui ... implements ServerListener {
     
        ...
        ServerEventDispatcher.getInstance().addServerListener(this); 
        ... 
     
      public void serverStateChanged(ServerEvent e) {
         ...
      }
    }

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Ta nouvelle solution me parait très intéressante. Je n'ai pas encore testé.

    Encore merci pour ton aide.

    HOLO

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 01/05/2013, 19h20
  2. [Débutant] Passage de paramètres vers un GUI
    Par Tripmania dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 19/11/2009, 09h54
  3. Réponses: 5
    Dernier message: 29/07/2009, 16h53
  4. [MySQL] Lancer un lien vers une de mes page en php
    Par heider dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 20/02/2006, 16h44
  5. "event" vers une autre application
    Par devmat dans le forum MFC
    Réponses: 5
    Dernier message: 05/10/2005, 15h15

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