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 :

"listener" sur une fonction (détecter un changement de valeur sur une variable static de la classe)


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 20
    Points : 17
    Points
    17
    Par défaut "listener" sur une fonction (détecter un changement de valeur sur une variable static de la classe)
    Bonjour,

    J'ai un programme sous Swing. J'aimerai rafraichir une partie de l'écran lors du scan d'une carte (avec un lecteur mifare). Lors du scan, je modifie la valeur d'une variable static de la classe.

    Actuellement, j'ai créé un thread... mais je trouve pas ça joli du tout :s et niveau fiabilité, c'est pas ça... ça marche 2 fois sur 3...

    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
    27
    28
    29
    30
    31
    32
    public class maClasse extends JPanel {
     
        static public String id="";
        static public String idMemory="";
     
        public maClasse() {
        	Update t = new Update(); //écoute si y a un changement sur id
            t.start();
        }
     
    // pleins d'autres méthodes :)
     
    //class qui alerte quand il y a un changement sur id
        public class Update extends Thread {
            Thread t;
     
            public Update(){
                    super();
            }
     
            public void run(){
                while( true ) {
                    if(id != idMemory) {
                        annuleUser(); //si éventuellement un user ouvert, on le ferme
                        updateInfo(); //la méthode qui met à jour la partie de l'écran
                        id = idMemory; //on met à jour la valeur
                    }
                }     
            }  
     
        }
    }
    Voila mon code actuel... Je trouve ça pas top... mais j'ai aucune idée de comment faire autrement. L'idée serait d'avoir un "listener" sur ma méthode qui vérifie si la valeur de id est différente de idMemory...

    Est-ce que quelqu'un aurait une idée pour rendre le truc plus solide et plus propre ?

    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 570
    Points : 15 535
    Points
    15 535
    Par défaut
    Il n'y a pas de "listener" de variable en java.

    Ceci dit, ta manière de procéder me parait étrange. Comment la variable id est elle modifiée?
    Tu ne peux pas au lieu de la modifier directement, faire appel a un méthode setId() qui la modifirait tout en lançant annuleUser() et updateInfo() ?

    Si pour une raison technique qui m'échappe, tu ne peux vraiment pas faire autrement, rajoute un Thread.yield() dans ta boucle while. Ça reste sale, mais ça évitera que ton processeur passe la moité de son temps à tourner dans le vide.

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    En fait, la variable est modifiée dans une autre classe, qui correspond à la fenetre principale... si je fais un setId, il faudrait que je passe tout en static pour que ça passe dans mon cas...

    Enfin, en gros, je crains qu'il faut que je repense mon architecture, pour garder une référence à cet objet JPanel dans ma classe de la fenetre principale... :s car là,je tourne en rond, et j'arrive pas à gérer mon bagdeage proprement...

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2006
    Messages : 20
    Points : 17
    Points
    17
    Par défaut
    Comme souvent, quand on est dans une impasse en programmation, c'est que la structure est bancale à la base...

    Ca y est, c'est corrigé ! J'ai repris la base de mon appli...

    Certes, il y a pleins de doc sur swing, mais toujours pour faire des petites appli à une fenêtre... dès qu'on veut un truc plus gros, les docs sont quasi inexistantes :s dur donc pour se lancer !

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

Discussions similaires

  1. [XL-2010] Lancer une fonction lors du changement de couleur d'une cellule
    Par Contrec dans le forum Excel
    Réponses: 13
    Dernier message: 09/06/2011, 13h34
  2. Réponses: 8
    Dernier message: 11/07/2009, 19h09
  3. Renommer une fonction dans un select ou concevoir autrement une fonction
    Par tavarlindar dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 30/05/2008, 17h17

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