JScrollPane: Scrollleiste auf Anfangsposition setzten
Beinke
- java
Hallo,
ich weise eine JEditorPane (mit Scrollleiste) per .setText() einen längeren Text bei der Inititialisierung zu. Dadurch wird leider gleich der Scrollbalken aktiv und verschiebt sich nach unten.
Wie kann ich ihn im Quellcode auf die Anfangsposition zurücksetzten?
Beste Grüße!
Beinke
Guten Morgen,
[...]
Wie kann ich ihn im Quellcode auf die Anfangsposition zurücksetzten?
Kennst Du die Java Swing How Tos? Du hast in den letzten Tagen einige Fragen dazu gestellt, die dort mit hoher Wahrscheinlichkeit beantwortet werden: http://java.sun.com/docs/books/tutorial/uiswing/components/componentlist.html
Zu Deiner aktuellen Frage könnte JComponent#scrollRectToVisible(Rectangle) das Richtige für Dich sein.
Schöne Grüße,
Peter
Hallo Peter,
mit JComponent#scrollRectToVisible(Rectangle) komme ich irgendwie nicht weiter.
Ich dachte auch schon ich hätte mit
//Code:
JScrollBar bar = MeineScrollPane.getVerticalScrollBar();
bar.setValue( bar.getMinimum() ); //bar.getMinimum() == 0
die Lösung. Klappt aber leider nicht.
Beste Grüße!
Beinke
PS:
Java Swing How Tos werde ich mir mal anschauen. Danke für den Tip!
[...] Klappt aber leider nicht. [...]
Das mit Deiner Fehlerbeschreibung klappt aber leider nicht. ;)
Was hast Du, was erwartest Du, was erhältst Du?
Schöne Grüße,
Peter
Hier mein Quellcode (das wesentliche):
--------------
...
meineJScrollPane = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
...
meineJEditorPane = new JEditorPane();
...
meineJScrollPane.setViewportView(meineJEditorPane);
...
--------------
//Ausgabe von...
System.out.println( meineJScrollPane1.getViewport().getVisibleRect() );
//liefert immer:
java.awt.Rectangle[x=0,y=0,width=0,height=0]
Zu meinem letzten Posting:
bar.getMinimum() liefert 0
bar.getMaximum() liefert 100
Warum ich aber per
bar.setValue(0);
kein Verschieben Scroll-Anfassers auf Position 0 erreiche - keine Ahnung!
Guten Morgen,
[...]
meineJScrollPane = new JScrollPane(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
...
meineJEditorPane = new JEditorPane();
...
meineJScrollPane.setViewportView(meineJEditorPane);
...//Ausgabe von...
System.out.println( meineJScrollPane1.getViewport().getVisibleRect() );
//liefert immer:
java.awt.Rectangle[x=0,y=0,width=0,height=0]
[...]
Warum ich aber per
bar.setValue(0);
kein Verschieben Scroll-Anfassers auf Position 0 erreiche - keine Ahnung!
Hast Du es denn auch mal mit der von mir oben genannten Methode probiert? Steht in dem Tutorial nichts zum Thema programmatisch scrollen? Vielleicht fehlt bei Deiner direkten Manipulation der Scrollbar ein repaint.
Schöne Grüße,
Peter
Bei Deinem
meineJEditorPane.scrollRectToVisible(???);
weiß ich nicht welchen Parameter ich da eingeben soll (habe ein new Rectangle(0,0,0,0) versucht, brachte aber nichts).
repaint() brachte auch nichts.
Ich gebe die Sache jetzt erst einmal vorerst auf. Als Anfänger fehlt mir da einfach noch das nötige Hintergrundwissen. Vielleicht finde ich ja doch noch irgendwann Beispielcode zu genau diesem Problem im Web.
Vielen herzlichen Dank nochmal für Deine Hilfe!
Beinke
Ich habe eine zumindest eine (leicht unsaubere) Lösung:
meineJEditorPane.setCaretPosition(0);
Kleiner Schönheitsfehler dabei:
Der Cursor ist leider nicht mehr am Ende des Textes, sondern am Anfang des Textes.
Wem das nicht reicht:
Diese Seite habe ich gerade gegoogelt (klingt SEHR vielversprechend und behandelt genau mein Thema):
http://www.tutorials.de/forum/swing-java2d-3d-swt-jface/317815-jsrollbar-bzw-jscrollpane-automatisch-nach-oben-scrollen.html
Die Seite bietet mind. 2 Lösungswege, die wohl auch bei den Autoren funktionierten. Bei mir funktionierten sie nicht (habe aber auch wie gesagt nicht den nötigen Durchblick in der Materie).