sólo ratón pulsado caso de jlabel actualización jlabel propiedad de texto correctamente

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

  •  18-09-2019
  •  | 
  •  

Pregunta

estoy usando un thread de java para actualizar jlabel valor de texto en mi aplicación pero después el texto actualizado en jlabel jlabel que muestra todos los valores actualizados y un nuevo valor de manera periódica a través de refrescando

pero cuando yo uso la misma función de actualización dentro del evento click de jlabel es la actualización de sí mismo como yo esperaba y que muestra el último valor sólo

¿qué puede causar este problema me estoy perdiendo de algunos de los métodos que mouseclick evento llama internamente ?

nore:la solicitud es japplet

¿Fue útil?

Solución

Debe asegurarse de que cualquier cambio en Swing componentes de interfaz de usuario se realizan en el hilo de eventos de Despacho. Aquí hay dos sugerencias para lograrlo:

Timer

Es posible que desee comprobar hacia fuera javax.swing .Timer si el objetivo es refrescar periódicamente el texto JLabel. Se activa el temporizador ActionEvents periódicamente sobre el hilo de despacho de sucesos:

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

SwingWorker

Como alternativa es posible que desee considerar el uso de un SwingWorker para realizar su procesamiento en segundo plano. El subproceso de trabajo de fondo puede comunicar dicha información a la rosca de distribución de eventos llamando 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();

Otros consejos

No estoy seguro exactamente lo que está pasando, pero me gustaría empezar por asegurarse de que su actualización se produce en el hilo de distribución de eventos. Tener su llamada hilo de actualización:

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

Vea la de distribución de eventos Tema tutorial.

¿por qué no probar u esto:labelname.paintImmediately(labelname.getVisibleRect());

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top