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 :

Surcharger les méthodes d'une class mère


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut Surcharger les méthodes d'une class mère
    Bonjour, le titre n'est pas être pas très explicite de ce que je veux faire, mais tant pi.
    Voila, j'aimerais rajouter dans les composant graphique de Java un paramètre, ainsi que modifier quelque peu certaines des fonctions pour qu'elles utilise ce paramètre.
    Seulement bah, je ne vois pas comment je peux faire pour faire en sorte que les tous les composant Swing herite de ma class, et non la class Component. Puis je faire ca sans avoir a faire heriter tous les types de composants, et de la rajouter le parametre ainsi que les fonctions qui vont avec ?

  2. #2
    Membre confirmé Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Points : 493
    Points
    493
    Par défaut
    Il n'est pas possible de modifier l'héritage d'une classe, et donc sans la sous classer je ne vois pas comment faire ce que tu souhaites. A part redéfinir Component dans ton projet, mais sur le fond, ce n'est pas une bonne idée.

    Peux-tu décrire les fonctionnalités que tu souhaites ajouter ? Ça permettrai de mieux te guider et de te proposer des solutions alternatives plus conventionnelles ...

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Hum, dommage. En gros je veux intégrer un système de traduction à la volé à mon programme (le programme est très souvent utilisé dans des démo face à un public internationnal). Donc que toute l'interface puisse changer de langue en un seul clic, sans avoir a recharger toute l'interface à chaque fois.

    J'ai un fichier de langue qui permet de connaitre la valeur de chaque composant.
    Donc je voulais rajouter un attribut a chaque composant qui permette de savoir quel est le nom du composant dans le fichier de langue, une fonction a component qui puisse directemet aller chercher la valeur du texte dans mes fichiers de langue. J'aurais eu une deuxième fonction puisse faire pour tous les composants qu'il contient.

  4. #4
    Membre confirmé Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Points : 493
    Points
    493
    Par défaut
    Effectivement, je vois a priori 2 approches pour traiter le problème, sauf si un mécanisme dédié existe en standard (???)

    1) Dériver les composants graphique pour leur ajouter cette fonctionnalité

    2) A la création de chaque composant graphique, enregistrer cette instance auprès d'un "gestionnaire de libellé" avec en paramètre l'instance du composant et une chaîne, représentant la clé du libellé à afficher dans un fichier de properties. Ensuite, il faut informer ce gestionnaire des changements de langue (méthode ou listener) pour qu'il charge le fichier de properties adapté et modifie le libellé de chaque composant qu'il gère. Attention de bien gérer la désinscription d'un composant détruit.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 155
    Points : 199
    Points
    199
    Par défaut
    perso j'utilise les RessourcesBundle de java, c'est en grande partie fait pour ca:

    Ressource.java:
    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
     
    public class Ressources
    {
      static ResourceBundle messages;
     
      static public void init(String language, String country)
      {
        Locale currentLocale;
     
     
        currentLocale = new Locale(language, country);
     
        messages =
          ResourceBundle.getBundle("ClientRare",currentLocale);
      }
     
      static public String getString(String s)
      {
        return (messages.getString(s));
      }
    }
    ClientRare_fr_FR.properties (dans le root de mon projet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sayhello = bonjour
    sayhelloworld = bonjour le monde
    emiErreur = Une erreur est survenu
    ClientRare_en_US.properties (dans le root de mon projet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sayhello = hello
    sayHeloWorld= hi everybody
    emitErreur = fuck'in shit
    pour l'utiliser on l'initialise au début avec ta langue (on peut aussi changer la langue n'importe quand, je pense pas qu'il y ai un probleme).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ressources.init("en", "US");
    puis quand on doit mettre le text dans ton JComopnent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ressources.getString("sayHeloWorld");

  6. #6
    Membre confirmé Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Points : 493
    Points
    493
    Par défaut
    Citation Envoyé par merill Voir le message
    perso j'utilise les RessourcesBundle de java, c'est en grande partie fait pour ca
    ...
    pour l'utiliser on l'initialise au début avec ta langue (on peut aussi changer la langue n'importe quand, je pense pas qu'il y ai un probleme).
    Le RessourceBundle permet effectivement de charger des libellés selon la langue, mais ce n'est pas lui qui va "pousser" les nouveaux libellés suite à un changement de langue vers les composants graphiques.

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    l'approche la plus conventionelle, comme mentionnée plus haut, c'est effecitvement d'écrire un gestionnaire de traduction, qui aurait en référence tous les composants créés associé à une clé de traduction et, donc, serait capable de changer leur texte, label ou autre à la volée. Pour changer ou pousser la langue, il parcourerais simplement se liste de composant, utiliserais chaque clé dans un ressource bundle, et ferait soit un setText() soit des trucs plus complexe, suivant la nature des composants.

    Cette approche est beaucoup plus simple que de réécrire tous les composants

    tu peux aussi utiliser une Interface pour tous les composant "traductible" avec une methode "updateLangue (Locale newLanguage). Mais là, çà nécessite que, pour tous composant swing que tu utilise, tu crée une sous classe qui implémente cette interface d'une manière ou d'une autre.

    Tu peux utiliser aussi un mix des deux système (sous classe pour les composants complexe, simple enregistrement pour les composants type JLabel).

    L'utilisation d'une weakhasmap ou de weekreferences pourra t'éviter des memoryleak via tes références.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 155
    Points : 199
    Points
    199
    Par défaut
    Citation Envoyé par djsnipe Voir le message
    Le RessourceBundle permet effectivement de charger des libellés selon la langue, mais ce n'est pas lui qui va "pousser" les nouveaux libellés suite à un changement de langue vers les composants graphiques.
    Ah, oui en effet ^^.
    Ton "gestionnaire de libellé" me plait bien.
    Je ferais ca, moi.

  9. #9
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Merci bien, je vais tenter ca.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/09/2010, 18h30
  2. Réponses: 2
    Dernier message: 15/09/2009, 17h55
  3. Déclarer les méthodes d'une classe
    Par bandit_debutant dans le forum Langage
    Réponses: 5
    Dernier message: 22/11/2007, 14h43
  4. [Système] Problème avec les méthodes d'une classe
    Par oussama127 dans le forum Langage
    Réponses: 7
    Dernier message: 30/08/2006, 10h18
  5. [POO]Appelé une méthode d'une classe mère
    Par LE NEINDRE dans le forum Langage
    Réponses: 2
    Dernier message: 14/12/2005, 15h44

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