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

Composants Java Discussion :

Methode de programmation


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut Methode de programmation
    voilà, j'ai un JPanel avec plein de composants dessus, j'ai crée une classe à part pour gérer les evenements des composants de ce JPanel.Seulement si la methode actionPerformed agit sur d'autres composants je suis obligé de définir ces composants en public static.
    je trouve que c'est pas trés propre tout ça, j'imagine qu'il doit y avoir mieux mais quoi?

    Merci de votre aide


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Pas besoin de declarer tes composants en static : tu passe juste un reference au panel principal (qui si j'ai bien compris contients les autres en membre d'instance protected ou package protected) dans le constructeur de ta classe gerant les evenements.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    non ils étaient en private, donc je mets protected à la place, c'est ça?
    sinon c'est une bonne manière de faire? mieux que les classes anonymes?

    P.S: grand grand grand merci à toi bouye,tu m'a sorti d'affaire un nombre incalculable de fois

    si je suis president un jour,je fais une statue à ta gloire


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Wahouu, a part ca je n'ai pas le tete qui enfle ... 8)
    Sans compter que j'ai moi-meme ete aide par d'autres membres du forum. Prevoir beaucoup de statues donc.

    Oui c'est clair quand le code du controlleur (la gestion des evenement) est trop gros ca peut etre une bonne idee de le mettre dans une classe a part ne serait-ce que pour rendre la classe principale un peu plus lisible. J'imagine que ton controller ne sera pas visible depuis l'exterieur donc c'est une bonne idee de le mettre en package protected (pas de modificateur donc devant le mot-cle class). Penser cependant a rajouter suffisement de doc pour indiquer le lien entre le controlleur et la classe principale.

    Quand aux membres de ta classe principale et bien cela depend de si tu comptes l'etendre ou pas (et ces modificateurs-la sont eux-meme majores par le modificateur de la classe bien sur) donc protected ou package-protected celon l'usage.

    Attention cependant , au niveau conception, si ta classe est public et extensible (en general dans une API et oriente reutilisabilite donc) ce n'est pas toujours une bonne idee de fixer ce genre de comportements en dur et de rendre les champs accessibles. Mais bon j'imagine que dans ton interface, ce n'est pas le cas present : il s'agit juste du composant primaire de l'application.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre Expert
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Par défaut
    ce que je ne comprends pas c'est qu'au départ j'ai mis mes champs en public , et je faisais appel à eux avec: monChamp.methode() et là le compilateur m'indique :non-static monChamp cannot be referenced from a static context


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    Probablement car tu avais mis ton listener dans une classe interne/temporaire static.

    Normalement il n'y a aucune difficulte a faire ca :

    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
     
    class Toto extends JPanel {
      JButton trucButton = new JButton("Truc");
      TotoListener totoListener = new TotoListener();
      ...
     
      trucButton.addActionListener(totoListener);
     
      ...
     
      private class TotoListener implements ActionListener {
        /** @inheritDoc
        */
        public void actionPerformed(ActionEvent event) {
          if (event.getSource() == trucButton) { 
            ...
          } 
        }
      }
    }
    Ce qui apres decoupage deviendra :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Toto extends JPanel {
      JButton trucButton = new JButton("Truc");
      TotoListener totoListener = new TotoListener(this);
      ...
     
      trucButton.addActionListener(totoListener);
     
      ...
     
    }
    Et :

    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
     
    class TotoListener implements ActionListener {
      private Toto toto;
     
      /** Creates a new instance.
      * @param toto The target toto.
      */
      public TotoListener(Toto toto) {
        this.toto = toto;
      }
     
      /** @inheritDoc
      */
      public void actionPerformed(ActionEvent event) {
        if (event.getSource() == toto.trucButton) { 
          ...
        } 
      }
    }
    Idem pour des appels de methodes d'instance de la classe Toto ou des methodes de ses membres.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/01/2009, 10h09
  2. methode de programmation
    Par yan dans le forum C++
    Réponses: 47
    Dernier message: 06/08/2008, 07h23
  3. [applet] appeler des methodes d'un programme en C
    Par allserv dans le forum Applets
    Réponses: 7
    Dernier message: 20/03/2007, 11h03
  4. Réponses: 7
    Dernier message: 23/01/2007, 11h08
  5. Methode de programmation sur des gros projets
    Par dynobremo dans le forum EDI
    Réponses: 10
    Dernier message: 08/06/2004, 02h59

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