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 :

Modification d'un JLabel depuis une autre classe


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut Modification d'un JLabel depuis une autre classe
    Bonjour à tous,

    J'ai cherché sur le net mais n'ai pas trouvé de réponses applicables à mon problème(simple, je suis sûr).

    J'explique :

    J'ai une JFrame avec des Horizontalbox et verticalBox dans lesquelles j'ai des composants JLabel.
    Dans ma JFrame, j'ajoute un JPanel.

    Dans mon autre classe, la classe Panneau est un extend de JPanel.
    Dans Panneau, je modifie de manière fréquente un string que je dois placer dans le JLabel qui se trouve dans ma classe Main.
    COmment dois je faire?J'ai essayé de placer le string en paramètre dans le constructeur de Panneau, mais ca ne sera exécuté qu'une fois or, les modif sont fréquentes.

    Merci de votre aide.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    En fait tu souhaites que ton JLabel se mette automatiquement à jour à chaque changement de valeur de ta String?

    La question est: comment saisis-tu ta nouvelle String? est-ce une saisie manuelle par une interface graphique?

  3. #3
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    Oui, je voudrais qu'a chaque fois que la variable score se met à jour, la valeur soit transmise automatiquement vers mon JFrame qui se trouve dans la classe Main.
    Et oui, c'est mon interface graphique qui modifie ma variable score.

    Merci.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Il y a plusieurs façons de procéder, plus ou moins adaptées selon la façon dont tu crée ton appli.

    Pour ma part celle que je préfère c'est d'utiliser de créer un objet qui contiendra une propriété score par exemple, de type String et un PropertyChangeSupport.

    Voir cette discussion à ce propos

    Quand tu modifies le champs score de l'interface graphique (ton Panneau), tu fais en sorte de modifier la variable score de l'objet.

    Pour se faire, met en écoute ton interface graphique par un keyListener par exemple, et quand elle est modifiée tu fait tonObjet.setScore(uneString).

    Ta méthode setScore(String) doit faire un fire de ton PropertyChangeSupport.

    Ensuite, tu fait en sorte que ton JLabel écoute ton objet score (score.addPropertyChangeListener()

    C'est peut etre pas trés clair... dis moi si c'est le cas.

  5. #5
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 27
    Par défaut
    Pour le keyListener, j'ai plus ou moins compris que ca pourrait etre utile pour savoir quand changer le texte du label.
    Mais j'ai pas compris les explications pour le propertyChangeSUpport.

    Score est une variable dans ma classe Panneau, n'est il pas simplement possible de transferer le contenu de la variable vers ma classe Main qui contient un JFrame et le JLabel en question?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    48
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 48
    Par défaut
    Si, tu peux aussi.

    Si tu ecoutes avec le keyListener, le texte se mettra à jour a chaque saisie de lettre, alors que sur un actionListener, ce sera lors de l'appuie sur la touche entrée.

    A toi de voir ce que tu préfère.

    Concrètement, met ton panneau en écoute sur le champs de saisie du score:
    champsScore.addKeyListener(this), ici "this" représente le panneau.

    Lors de la déclaration de ta classe Panneau, indique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Panneau implements KeyListener
    , puis ajoute les méthodes:
    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
     
    	@Override
    	public void keyTyped( KeyEvent e ) {
    		// TODO Auto-generated method stub
    	}
     
    	@Override
    	public void keyPressed( KeyEvent e ) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void keyReleased( KeyEvent e ) {
    		// TODO Auto-generated method stub
     
    	}
    Ensuite va sur l'une des méthodes que tu viens de créer (par exemple, keyReleased()).

    Cette méthode sera appelée à chaque saisie de caractère dans ton champs score. C'est là qu'il faut mettre à jour ton JLabel.
    Débrouille-toi pour acceder à ton JLabel depuis cette méthode, et fais lui un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setText(champsScore.getText());

  7. #7
    Membre Expert 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
    Par défaut
    Citation Envoyé par bigram Voir le message
    Score est une variable dans ma classe Panneau, n'est il pas simplement possible de transferer le contenu de la variable vers ma classe Main qui contient un JFrame et le JLabel en question?
    Oui c'est parfaitement possible si tu disposes d'une méthode de mise à jour dans la JFrame, après c'est un choix de conception avec la solution par notification proposée :
    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
    class Main extends JFrame {
     
       private JLabel leJLabelQuiAfficheLeScore = new JLabel("0");
     
       public void scoreChanged(int newScore) {
          leJLabelQuiAfficheLeScore.setText(String.valueOf(newScore));
       }
    }
     
    class Panneau extends JPanel {
     
       private Main mainFrame;
       private int score;
     
       public Panneau(Main mainFrame) {
          this.mainFrame = mainFrame;
       }
     
       private void updateScore() {
          score += ...;
     
          mainFrame.scoreChanged(score);
       }
    }
    A noter qu'il n'est pas très sain que la classe Panneau connaisse la classe Main (la dépendance est dans le mauvais sens). Tu devrais créer une classe/une interface permettant de transmettre les modifications à d'autres classes... Exemple :
    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
    interface Notifier {
     
       void scoreChanged(int newScore);
    }
     
    class Main extends JFrame implements Notifier {
     
       ...
    }
     
    class Panneau extends JPanel {
     
       private Notifier notifier;
     
       public Panneau(Notifier notifier) {
          this.notifier= notifier;
       }
     
       ...

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 23/04/2007, 16h31
  2. GC appel depuis une autre classe
    Par dark2 dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 09/06/2006, 05h53
  3. JProgressbar qui avance depuis une autre classe....
    Par Baptiste Wicht dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 02/02/2006, 20h04
  4. [Débutant] Lancer procédure depuis une autre classe
    Par pugnator dans le forum Langage
    Réponses: 5
    Dernier message: 31/10/2005, 14h50
  5. Acces a un control depuis une autre classe
    Par schnito dans le forum MFC
    Réponses: 5
    Dernier message: 25/01/2004, 22h14

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