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

Langage Java Discussion :

[POO] Problème d'héritage "inversé"


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Par défaut [POO] Problème d'héritage "inversé"
    Bonjour ou bonsoir,

    Je suis en train de chercher une solution pour pouvoir modifier une variable déclarée dans une sous-classe à partir d'une classe supérieure. Je pense que je ne peux pas le faire, mais y aurait-il moyen de contourner cela?

    Je débute dans la POO, si je vous explique mon problème plus en détails vous me donnerez p-e une alternative. Je suis en train de faire un générateur de couleur avec une interface graphique en AWT (je passerai au Swing après).

    Mon Interface se compose de:
    -Grand Panel avec background qui change de couleur
    -Un bouton "Random", un bouton "exit"

    -Un Label , Textfield et scrollbar pour le rouge
    -Un Label , Textfield et scrollbar pour le vert
    -Un Label , Textfield et scrollbar pour le bleu

    -un Textfield pour afficher le code de la couleur en format HTML


    Comme vous le voyez, j'ai trois fois la même chose dans mon interface. J'ai donc pensé à créer une nouvelle classe pour gérer ces 3 lignes. Supposons que je l'ai appelée colorManage et que ma classe où se situe le main s'appelle subClass.

    Le subClass gère tout ce qui est en orange et c'est là que se trouve le problème. J'aimerai que quand l'utilisateur change la position du scrollbar ou le contenu du textfield que le programme change la couleur du grand panel.

    Pour faire cela, il faudrait que je puisse accéder à la méthode changeColor() à partir de colorManage ou à l'objet Panel afin de changer sa couleur de background.

    Comment pourrais-je faire cela avec une approche orientée objet? J'avais commencé avec une seul classe, mais j'aimerai voir si cela est possible.

    Merci par avance pour votre aide.

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour.
    Je ne suispas sur d'avoir compris ton problème, alors, un peu plus d'explications ou un exemple ne serait pas de refus !

    Sinon, pourquoi ne pas passer par les listeners ? c'est à dire ajouter un listener onChange à chaque ScrollBar qui sera appelé par AWT à chaque fois qu'un ScrollBar est déplace et qui met à jour la couleur du Panel ainsi que les divers champs texte concerné ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Par défaut
    C'est ce que je fais, j'utilise des listeners (AdjustmentListener, TextListener et ActionListener).

    Pour faire simple, je vais résumé les constructeurs, méthodes de mes 2 classes:

    class subMain extends colorManage implements ActionListener :
    -constructeur de window (fenêtre qui contiendra tout), déclaration des différents objets nécessaires (grand panel, 2boutons,...) dont 3 colorManage.
    -fonction main qui "construit" un window
    -méthode changeColor() qui change la couleur du panel
    -public void actionPerformed (ActionEvent e){...} qui gère les click sur les boutons et qui fait appel à changeColor().

    class colorManage extends Frame implements AdjustmentListener, TextListener
    -constructeur de colorManage qui prend un String en paramètre (nom de la couleur), donc il crée un label+textfield+scrollbar.
    -public void textValueChanged(TextEvent e){...} qui gère les changements sur le textfield, met la même valeur au scrollbar et devrait changer le fond du panel avec changeColor();.
    -pareil pour les actions sur le scrollbar
    -méthodes diverses pour obtenir ou modifier les valeurs de textfield ou scrollbar

    Je ne sais pas si c'est plus clair pour vous? Je peux aussi vous passer le code, mais c'est 200lignes....

    Encore merci d'avance.

  4. #4
    Membre éclairé
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Par défaut
    Je suis surpris de ne pas avoir de réponses. La question est-elle si difficile que ça? Je vous aiderai p-e en mettant le fichier java (qui ne compile pas) à votre disposition.

    Le fichier java GUI_Window2 est fait en une seule classe, fonctionne et vous permettra de voir le rendu.
    Le fichier java GUI_Window est une tentative pour faire la même chose avec 2 classes.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Bonsoir

    Faire dériver GUI_Window de colorManage est dans ton cas une erreur de conception. Il faut utiliser une agrégation. GUI_Window devra créer 3 colorManage.

    Derniere remarque, les règles de programmation en java suggèrent que les noms de classes commencent par une majuscule.

  6. #6
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Je confirme, et pour expliquer un peu plus :
    - créer une classe ColorManager (rien à voir avec ta classe colorManager qui d'une part est un javaBean (avec des propriétés red, blue, green, etc., + les getters et les setters) + une partie de calcul qui adapte les différents champs lorsqu'un setter est appelé.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void setRed(int red){
      this.red = red;
      hexColor = colorToHex(red, green, blue);// la méthode interne qui convertit 3 composantes RGB en un représentation HTML-like.
    }
    - créer une unique classe qui s'occupe du GUI. Elle ajoute aussi des listeners aux divers composants (TextField, ScrollBar, etc.). Chacun de ces listeners fait 2 choses:
    1. appeler le setter adequat de ColorManager, ce qui déclenche aussi la mise à jour des autres champs de ColorManager.
    2. appeler une méthode interne update qui récupère les champs de ColorManager et met à jour les composants de te fenêtre.

    Cette méthode est à mon avis plus simple et propre à mettre en place, qui plus est assure la séparation des taches (la classe du GUI ne s'occupe que du GUI, ColorManager ne s'occupe que des couleurs)
    Voilou.
    Bonne chance.

Discussions similaires

  1. [Débutant] [POO] Problème d'héritage
    Par fire.stone dans le forum Langage
    Réponses: 3
    Dernier message: 01/10/2006, 00h21
  2. [POO] Problème héritage des classes PHP4
    Par zana74 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2006, 17h00
  3. Problème sur Request.ServerVariables("QUERY_STRING"
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 25/03/2005, 12h47

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