JLabel soll nach x Sekunden überzeichnet werden.

Charly81

Grünschnabel
Hallo,
folgendes Problem:
Ich habe clientseitig auf einem JApplet ein JPanel mit mehreren Textfeldern, ComboBoxen, etc.
Der User gibt darin seine Daten ein und klickt auf einen Button worauf die Daten an den Server geschickt und dort in die DB geschrieben werden.
Ist dies erfolgreich füge ich dem JPanel eine Statusmeldung in Form eines JLabels hinzu, und setze daraufhin die User-Eingaben wieder zurück.
Die Statusmeldung sollte aber erst nach ein paar Sekunden (zwischen 3 und 5) wieder verschwinden, also das JLabel mit
label.setText(" ");
überschrieben werden und erst dann die möchte ich die UserEingaben zurücksetzen.
Wie kriege ich diese Verzögerung am Besten hin?

Vielen Dank im Voraus!

Gruß Charly
 
Wie müßte das dann ungefähr aussehen?
Hab nämlich schon mal einen Versuch in diese Richtung gestartet, der aber nicht sonderlich erfolgreich war.
 
Hallo!

Hier das ganze mal examplarisch...
Code:
/*
 * Created on 12.01.2005@14:01:27
 *
 * TODO Explain me...
 */
package de.tutorials;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;

/**
 * @author Darimont
 *
 * TODO Comment me
 */
public class JLabelExample extends JFrame {

    private JLabel label;

    public JLabelExample() {
        super("JLabelExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        label = new JLabel("Übertrage...");
        getContentPane().add(label);

        Timer timer = new Timer(3000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                label.setText("");
            }
        });

        pack();
        setVisible(true);

        timer.start();
    }

    public static void main(String[] args) {
        new JLabelExample();
    }
}

Gruß Tom
 
Vielen Dank, funktioniert prima, hab's aber selbst mit Hilfe eines Threads hingekriegt.

--> mich würde natürlich noch eure Meinung dazu interessieren ob ich dabei auf etwas Besonderes achten muß, da ich Thread-technisch noch etwas grün hinter den Ohren bin.

Also, nachdem das JLabel/die Statusmeldung dem Panel hinzugefügt wird starte ich mit:

...
Thread WaitingThread = new WaitingThread(3000);
WaitingThread.start();
...

folgenden Thread (als lokale Klasse hinzugefügt) den ich in seiner run-Methode zu Beginn mit sleep() schlafen lege und dann erst die Statusmeldung verschwinden lasse:

class WaitingThread extends Thread
{
long time;

WaitingThread(long time)
{this.time = time;}

public void run()
{
try{
sleep(time);
//storeWarning/toDoWarning/topWarning sind drei JLabels für Statusmeldungen
storeWarning.setText("");
toDoWarning.setText("");
topWarning.setText("");

//eigene Methode um die Werte der Eingabefelder zurücksetzen
resetUserInput();
}
catch(Throwable t){t.printStackTrace();}
}
}

Ist vielleicht ein wenig umständlicher aber funktioniert auch.

Auf alle Fälle ein großes Dankeschön an euch! Man bekommt seine Antworten ja echt fix!

Gruß Charly
 
Zurück