seul événement cliqué sur la souris de mise à jour JLabel propriété texte JLabel correctement

StackOverflow https://stackoverflow.com/questions/1686188

  •  18-09-2019
  •  | 
  •  

Question

J'utilise un thread java pour mettre à jour la valeur de texte JLabel dans ma demande mais après le texte mis à jour le JLabel JLabel montrant toutes les valeurs passées et mises à jour périodiquement nouvelle valeur pour lui-même via rafraîchissante

mais quand j'utiliser la fonction de mise à jour même dans le cas de mouseclick JLabel il se met à jour comme prévu et montrant la dernière valeur que

ce qui peut provoquer ce problème suis-je manque quelques méthodes événement mouseclick appelle en interne?

Nore: application est JApplet

Était-ce utile?

La solution

Vous devez vous assurer que les modifications Swing composants de l'interface sont exécutées sur le thread de répartition des événements. Voici deux suggestions pour y parvenir:

Minuteur

Vous pouvez consulter javax.swing .Timer si l'objectif est d'actualiser périodiquement le texte JLabel. Les feux de minuterie ActionEvents périodiquement sur le thread de répartition de l'événement:

  int delay = 1000; //milliseconds
  ActionListener taskPerformer = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
          label.setText("foo");
      }
  };
  new Timer(delay, taskPerformer).start();

SwingWorker

Sinon, vous voudrez peut-être envisager d'utiliser un SwingWorker pour effectuer votre traitement de fond. Le thread de travail de fond peut communiquer ces informations au fil de répartition de l'événement en appelant publish.

new SwingWorker<Void, String>() {
  // Called by the background thread.
  public Void doInBackground() {
    for (int i=0; i<100; ++i) {
      // Do work.  Periodically publish String data.
      publish("Job Number: " + i);
    }
  }

  // Called on the Event Dispatch Thread.
  @Override
  protected void process(List<String> chunks) {
    // Update label text.  May only want to set label to last
    // value in chunks (as process can potentially be called
    // with multiple String values at once).
    for (String text : chunks) {
      label.setText(text);
    }
  }  
}.execute();

Autres conseils

Je ne sais pas exactement ce qui se passe mais je commencerais par vous assurer que votre mise à jour se produit dans le thread de répartition des événements. Demandez à votre appel fil de mise à jour:

SwingUtilities.invokeLater(new Runnable() {
  public void run() {
    // ...update the text...
  }
});

Voir la Event Dispatch Discussion tutoriel .

pourquoi ne pas u essayez ceci: nomÉtiquette .paintImmediately ( nomÉtiquette .getVisibleRect ());

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top