2016-09-09 3 views
1

Ich habe eine JScrollPane mit JPanel darauf. Ich habe auch viele verschiedene Komponenten auf JPanel (zum Beispiel Labels, JTextFields, JTextAreas). Diese Komponenten werden programmgesteuert (zur Laufzeit auf der Benutzeranforderung) hinzugefügt. JPanel verwendet SpringLayout. Das Programm berechnet die bevorzugte Größe von JPanel nach dem Hinzufügen von Komponenten, da das Scrollen ohne Berechnung nicht richtig funktioniert. Hinzufügen von Komponenten und Berechnen der bevorzugten Größe sind Teil meiner prepareGui() -Methode. Die auf Komponenten angezeigten Daten werden regelmäßig aktualisiert (in meiner refreshData() -Methode, die vom Listener aufgerufen wird).Die Bildlaufleiste bewegt sich nach der Datenaktualisierung

Mein Problem: nach der Aktualisierung setzt Bildlaufleiste immer auf feste Position (ich weiß nicht warum). Ich möchte, dass die Bildlaufleiste nach dem Aktualisieren in alter Position bleibt.

Ich habe versucht, einen Platz zu finden, wo sich die Bildlaufleiste bewegt. Ich hatte einige Werte am Anfang und am Ende des Refresh() -Methode, aber sie war die gleiche (sie nicht innerhalb von Refresh veränderten()):

scrollPane.getVisibleRect().getX() 
scrollPane.getVisibleRect().getY() 
scrollPane.getVisibleRect().getWidth() 
scrollPane.getVisibleRect().getHeight() 
panel.getVisibleRect().getX() 
panel.getVisibleRect().getY() 
panel.getVisibleRect().getWidth() 
panel.getVisibleRect().getHeight() 
scrollPane.getHorizontalScrollBar().getX() 
scrollPane.getHorizontalScrollBar().getY() 
scrollPane.getHorizontalScrollBar().getWidth() 
scrollPane.getHorizontalScrollBar().getHeight() 
scrollPane.getHorizontalScrollBar().getValue() 
scrollPane.getVerticalScrollBar().getX() 
scrollPane.getVerticalScrollBar().getY() 
scrollPane.getVerticalScrollBar().getWidth() 
scrollPane.getVerticalScrollBar().getHeight() 
scrollPane.getVerticalScrollBar().getValue() 

Ändern von Layout-Manager nicht nehmen bewirken.

Ich bemerkte eine Sache (ich weiß nicht, ob es irgendeine Bedeutung hat). Wenn ich nur die bevorzugte Größe einstelle (in prepareGui()), bewegt sich die Bildlaufleiste zum Ende. Wenn ich auch die Größe einstelle, bewegt sich die Bildlaufleiste in eine seltsame, feste Position.

Wie kann ich das verhindern? Die Bildlaufleiste sollte ihre aktuelle Position beibehalten.

Antwort

1

Ich fand endlich die Antwort hier: https://stackoverflow.com/a/5230477/5694159 (danke an Johan M) im Thema über JTextArea statt JPanel. Wenn die refreshData() in separaten Thread aufruft, funktioniert es gut.

Ich hoffe, diese Frage und Antwort wird jemandem helfen.

Verwandte Themen