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 :

changement dynamique du langage d'une interface swing


Sujet :

AWT/Swing Java

  1. #1
    jeanfeu
    Invité(e)
    Par défaut [résolu]changement dynamique du langage d'une interface swing
    alors je m'explique j'utilise un fichier qui regroupe les différente langue de mon programme le changement de langue ce passe bien si je rajoute les option suivante a la JVM
    -Duser.language = en -Duser.country=GB
    -Duser.language = fr -Duser.country=FR

    mais moi je veut pouvoir le faire dynamiquement dans mon programme
    j'ai essayer en faisant des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    System.setProperty("user.language","en");
            System.setProperty("user.country","GB");
    au début de mon programme mais ça change rien ca continue a utiliser le francais
    Dernière modification par jeanfeu ; 06/05/2008 à 17h11.

  2. #2
    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 807
    Points
    48 807
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Locale.setDefault(new Locale("en","GB"));

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Et en passant par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Locale.seetLocale(Locale.UK)

  4. #4
    jeanfeu
    Invité(e)
    Par défaut
    merci à tous les deux ca marche

    j'ai ma fenetre principale qui ne change pas
    je suis obliger de faire un new pour ca mette a jour
    est ce que ya une methode moins bourine pour faire ca?

  5. #5
    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 807
    Points
    48 807
    Par défaut
    Le code qu'on t'as filé change juste la locale par défaut, pour redessiner l'interface avec la nouvelle langue, il faut que les composant repompent du bon ressource bundle leurs données. Pour la pluspart des composant c'est lu seulement à la création du composant. Si t'as des composant personnalisé, tu peux aussi essayer de keur ajouter une methode qut tu appelle après le setLocale et qui leur dit de se "relire".

  6. #6
    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
    Une idée, c'est de parcourir ton arborescence de composants et d'appeler la méthode setLocale() sur chacun d'eux. L'appel de cette méthode a pour effet de notifier les listeners de type PropertyChangeListener avec comme propriété modifiée "locale". Tu attaches le listener à chacun des composants et tu les rafraichis en conséquence lorsque la locale est modifiée.

  7. #7
    jeanfeu
    Invité(e)
    Par défaut
    merci tous les deux mais .....

    Citation Envoyé par herve91 Voir le message
    Une idée, c'est de parcourir ton arborescence de composants et d'appeler la méthode setLocale() sur chacun d'eux. L'appel de cette méthode a pour effet de notifier les listeners de type PropertyChangeListener avec comme propriété modifiée "locale". Tu attaches le listener à chacun des composants et tu les rafraichis en conséquence lorsque la locale est modifiée.
    si je te comprend bien je doit definir un listener sur propritychange de chaques composants (enfin ce qui on du texte à changer) de ma frame principale et de faire un setLocale sur chacun de c'est composant pour activé les listener


    j'ai une petit question dans le code des listener je doit fairequoi exactement pour mettre à jour car je ne vois pas trop a part le new

  8. #8
    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
    De mémoire, qq chose comme ça :
    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
    abstract class LocalePropertyChangeListener implements PropertyChangeListener {
     
       public void propertyChanged(PropertyChangeEvent e) {
         setText(e.getSource(), (Locale) e.getNewValue());
       }
     
       protected abstract void setText(Component c, Locale locale);
     
     
       protected String getTextForLocale(Component c, Locale locale) {
          ...
       }
    }
     
    class LabelLocalePropertyChangeListener extends LocalePropertyChangelListener {
     
       protected void setText(Component c, Locale locale) {
         ((JLabel) c).setText(getTextForLocale(c, locale));
       }
    }
     
    class ButtonLocalePropertyChangeListener extends LocalePropertyChangelListener {
     
       protected void setText(Component c, Locale locale) {
         ((JButton) c).setText(getTextForLocale(c, locale));
       }
    Le problème est de définir le getTextForLocale()... Sans doute faut-il mémoriser qq part l'association Component -> clé d'accès au ResourceBundle

  9. #9
    jeanfeu
    Invité(e)
    Par défaut
    merci herve

    j'ai fait plus simple j'ai fait une fonction qui ffait les setttxt de chaque elements de la frame principale et je l'appel lors d'un changement de langue

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

Discussions similaires

  1. Modifier dynamiquement le "langage d'une table paradox"
    Par sp2i dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/11/2009, 15h57
  2. Quel langage pour une interface qui interagit avec l'utilisateur ?
    Par captain dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 04/12/2007, 09h46
  3. Quel langage pour une interface graphique digne de ce nom ?
    Par Guillaume222 dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 06/11/2007, 15h58
  4. Choix d'un langage pour une interface graphique
    Par MortDansLAme dans le forum Bibliothèques
    Réponses: 3
    Dernier message: 30/06/2007, 01h29
  5. Accéder à une interface swing à partir d'un thread
    Par bart64 dans le forum Concurrence et multi-thread
    Réponses: 5
    Dernier message: 15/10/2006, 15h54

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