2017-03-25 2 views
0

schaute ich auf Scroll JScrollPane to bottom und fand die Antwort =>Auto scroll nach unten von einem Bildlauffenster

JScrollBar vertical = scrollPane.getVerticalScrollBar(); 
vertical.setValue(vertical.getMaximum()); 

sehr gut zu funktionieren.

Es geht jedoch nicht ganz nach unten, wenn viel ausgegeben wird.

Ich habe jetzt eine Verzögerung hinzugefügt (nicht aus der EWT) und dann ein weiteres Update in der EWT, die den Trick macht.

Thread thread = Thread.currentThread(); 
     try { 
      thread.sleep(99); 
     } catch (InterruptedException ex) { 
    } 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { log(""); } 
    }); 

Antwort

0

Gibt es eine einfache Möglichkeit, zu warten, für alle die Ausgabe zu beenden ruft?

Ich weiß nicht genau, was Sie tun, aber normalerweise möchten Sie Thread.sleep (...) nicht verwenden.

Stattdessen können Sie Ihren Code in eine SwingUtilities.invokeLater(...) wickeln. Dadurch wird der Code am Ende des Ereignis-Dispatch-Threads (EDT) platziert, sodass er nach Abschluss der anderen Verarbeitung ausgeführt werden kann.

SwingUtilities.invokeLater(new Runnable() 
{ 
    public void run() 
    { 
     JScrollBar vertical = scrollPane.getVerticalScrollBar(); 
     vertical.setValue(vertical.getMaximum()); 
    } 
}); 

den Ausschnitt aus der Swing-Tutorial Lesen Sie für weitere Informationen über die EDT auf Concurrency in Swing und warum dies wichtig ist.

Vielleicht eine bessere Lösung für Ihren Code ist die Verwendung eines SwingWorker wie in der Anleitung beschrieben.

+0

Geht das immer noch auf dem EDT, wenn ich in einem SwingWorker Thread bin? – bob

+0

Der Sinn der Verwendung von SwingWorker besteht darin, dass es Ihnen und der API ermöglicht, etwas Code in einem separaten Thread auszuführen, aber dann anderen Code auf dem EDT-Thread auszuführen. Wenn Sie ein Ergebnis veröffentlichen, das automatisch auf dem EDT ausgeführt wird. Wenn Sie die done() -Methode implementieren, die auch im EDT ausgeführt wird. Lesen Sie das Lernprogramm erneut, um weitere Informationen zum SwingWorker einschließlich der Arbeitsbeispiele zu erhalten. – camickr