2016-11-23 1 views
0
arbeitet

ich einen JButton haben, nennen wir es „Knopf“ und fügte hinzu, eine Action es: usw.ein JLabel Text ändern, während ein JButton Zuhörer

button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
     call(); 
    } 
}); 

Es ist richtig hinzugefügt meinen Rahmen In diesem JFrame Ich habe auch ein JLabel, und ich möchte seinen Text ändern, während die JButton-Methode funktioniert (weil es ~ 30 Sekunden dauert, um zu beenden). Wie mache ich das? Muss ich etwas Multithread-Ding benutzen? Hier ist das Grundprinzip (das JLabel genannt wird ausgegeben):

public void call(){ 
    output.setText("test1"); 
    try { Thread.sleep(1000); 
    } catch (InterruptedException e) {} 
    output.setText("test2"); 
} 

Diese in der „Ausgabe“ Label führt nach einer Sekunde auf „Test2“ geändert wird. Wie kann ich sofort "test1" anzeigen lassen?

+0

Entfernen Sie alles nach 'output.setText (" test1 ");' ... – Reimeus

Antwort

2

Verwenden Sie nicht Thread.sleep(). Dies verhindert, dass sich die GUI selbst neu erstellt.

Muss ich Multithread-Ding verwenden?

Ja.

Für eine lange laufende Aufgabe müssen Sie eine separate Thread starten, damit die GUI reaktionsfähig bleiben kann.

In diesem Fall können Sie eine SwingWorker verwenden.

Lesen Sie den Abschnitt aus dem Swing-Lernprogramm unter Concurrency für weitere Informationen und ein Beispiel für die Verwendung eines SwingWorker.

+0

Nun, die Sache ist, dass es Sinn macht, dass die Taste gedrückt bleibt, während die Methode funktioniert, da Sie dann 1) sehen können wenn das Skript beendet ist 2) nicht erneut drücken, bis es fertig ist – Xerus

+0

@Xerus, Nein, es ergibt keinen Sinn. Sie sollten keine Anwendung entwerfen, die bei jedem Aufruf einer lang laufenden Aufgabe einfriert. Wenn Sie dem Benutzer ein visuelles Feedback geben möchten, sollten Sie eine 'JProgressBar' verwenden. Lesen Sie den Abschnitt aus dem Swing-Lernprogramm unter [Verwenden von Fortschrittsbalken] (http://docs.oracle.com/javase/tutorial/uiswing/components/progress.html), um weitere Informationen zu erhalten. – camickr

+0

danke! Wenn ich ein komplexeres Projekt mache, schaue ich genauer hin – Xerus

Verwandte Themen