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

Interfaces Graphiques en Java Discussion :

Propagation d'évènement d'un JPanel vers son containeur JTabbedPane


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Par défaut Propagation d'évènement d'un JPanel vers son containeur JTabbedPane
    Bonsoir,

    je réalise un ensemble de formulaires placés dans des onglets.
    Concrètement, il s'agit de plusieurs FormPanel ( classe perso extends JPanel) ajoutés dans un JTabbedPane.

    Mon besoin: qu'une action de validation déclenchée dans un FormPanel soit
    relayée au JTabbedPane contenant pour que celui ci traite cette
    information:

    Typiquement l'appui sur le bouton "check" qui valide les données du
    formulaire colorie en rouge ou vert l'onglet qui le contient (le
    formulaire).

    Pour l'instant j'implémente le pattern Observateur comme décrit ici:
    http://java.sun.com/developer/techni...ObjectsInSync/

    cf le source de trois classes ci-jointes pour démonstration.

    Mais j'ai le sentiment que la solution est un peu lourde.

    Ai-je une autre alternative ?



    merci pour vos lumières.
    Fichiers attachés Fichiers attachés

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Par défaut
    D'abord, tu as raison de penser que la solution est lourde. Il n'est pas forcément nécessaire d'implémenter un observateur.
    De plus, l'implémentation des observateurs nécessite également de gérer les désabonnements, beaucoup de problèmes de fuite mémoire en Java viennent de ce phénomène.

    Tu peux faire ceci, j'écris le code à la volée, donc il ne sera pas compilable directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    // j étends le JTabbedPane
    public class MonTabPane extends JTabbedPane {
     
        // visibilité public/protected/default, je te conseille default et de mettre
        // les autres panels dans le meme package
        public void fireMonSuperEvenementQuiR0X(MonEvent e) {
     
            // on fait pleins de trucs.
     
        }
     
    }
    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 MonJPanel extends JPanel {
     
        // A verifier pour le getParent() de récupérer un object d'instance
        // MonTabPane avec les cast et tout ce qu'il faut !!!
        // une méthode qui remonte jusqu'au parent qui va bien peut être nécessaire.
        private void propagateToMonTabPane() {
     
            this.getParent().fireMonSuperEvenementQuiR0X(new MonEvent());
            // un cast sera très certainement demandé
            // du genre ((MonTabPane) this.getParent())... 
     
        }
        // l'autre solution c'est de passer la référence de MonTabPane
        // attention aux références croisées dans ce cas !
        // Dans ce cas, un simple setter peut être utilisé
        public void setMonTabPane(MonTabPane pane) {
     
            this.monTabPane = pane;
     
        }
        // la méthode de propagation devient alors
        private void propagateToMonTabPane() {
     
            this.monTabPane.fireMonSuperEvenementQuiR0X(new MonEvent());
     
        // Pas de cast, mais obligation de lacher la référence à la destruction de this
        }
     
    }

Discussions similaires

  1. [Graphics View] Propagation des évènements vers un QGraphicsWidget
    Par afloret dans le forum Qt
    Réponses: 10
    Dernier message: 10/02/2010, 10h16
  2. [C# 2.0] Propagation d'évènement
    Par l0k1 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/05/2006, 14h37
  3. FocusListener sur JPanel et son contenu
    Par Invité dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 11/05/2006, 14h23
  4. Réponses: 1
    Dernier message: 12/12/2005, 18h29
  5. Envoyer résultat d'une popup vers son window.parent
    Par LFC dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/12/2004, 11h18

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