# JScrollPane: Autoscroll



## m!k3 (5. Feb 2004)

So ich hab nun die Scrollleiste für mein JTextPane hinbekommen, aber nun bräuchte ich Hilfe bei Thema Autoscroll... kann mir jemand Tipps geben? Danke !  :wink:


----------



## Stefan1200 (5. Feb 2004)

Erzähle doch mal, was du nun genau wissen möchtest, oder was dein Problem ist.


----------



## m!k3 (5. Feb 2004)

Wie ich eben den Autoscroll hinbekomme, mit welchem Befehl, muss ich die Scrollleisten werte verändern oder was ist zu tun genau?


----------



## bygones (5. Feb 2004)

du kannst dir von der ScrollBar das Model holen 

```
BoundedRangeModel model = scrollBar.getModel();
```
dann kannst du mit der Methode:

```
setValue(int newValue);
```
den Wert der Scrollbar setzen (genaueres siehe API)


----------



## m!k3 (6. Feb 2004)

wieso denn ScrollBar?

Wie krieg ich dann ne verbindung zu meinem ScrollPane?!?!


----------



## bygones (6. Feb 2004)

m!k3 hat gesagt.:
			
		

> wieso denn ScrollBar?


Weil du nun eben die Scrollbar an sich ändern willst, die ScrollPane ist ja nur die Componente, die die JScrollBar u.a. hält.... 






http://java.sun.com/j2se/1.4.1/docs/api/javax/swing/JScrollPane.html



			
				m!k3 hat gesagt.:
			
		

> Wie krieg ich dann ne verbindung zu meinem ScrollPane?!?!


du bekommst deine JScrollBars über


```
scrollPane.getHorizontalScrollBar(); // die horizontale Scrollbar
scrollPane.getVerticalScrollBar(); // die vertikale Scrollbar
```


----------



## m!k3 (6. Feb 2004)

joa hab die Lösung rausbekommen.. also falls es jemanden intressiert


```
public static JScrollPane scrollleiste = new JScrollPane(textpane);
public static JScrollBar  scrollbar1;

scrollbar1 = scrollleiste.getVerticalScrollBar();
scrollbar1.setValue(scrollbar1.getMaximum());
```


----------



## mike (16. Jun 2004)

ich bins mal wieder..

es geht um die Sache mit dem scrollbar1.setValue(scrollbar1.getMaximum());

Hin und wieder kommt es vor, das die Scrollleiste nicht wirklich auf das volle Maximum gesetzt wird... warum?!
Mein Chat steht und wenn man schreibt, soll er ja mitscrolln.. nur hin und wieder wird nix gescrollt.

thx 4 help


----------



## mike (16. Jun 2004)

textpane.setCaretPosition(Wie bekomme ich die Position in die letzte Zeile???);

daaanke )


----------



## Roar (16. Jun 2004)

mike hat gesagt.:
			
		

> ich bins mal wieder..
> 
> es geht um die Sache mit dem scrollbar1.setValue(scrollbar1.getMaximum());
> 
> ...



wenn du die API gelesen hättest hättest du gelesen dass:



> getMaximum()
> 
> Returns the model's maximum. Note that the upper limit on the model's value is (maximum - extent).



du musst scrollbar.getModel().getMaximum() + scrollbar.getModel().getExtent() rechnen, und den wert deiner scrollbar zuweisen.


----------



## mike (16. Jun 2004)

mhh.. ja schon.. aber ich hab das selbe ergebnis dennoch.. er hat ja auch richtig gescrollt mit nur dem einen befehl ohne der addition.. nur hin und wieder bleibts einfach hängen.. auch mit Addition !  :? 

btw. ich arbeite mit der api.. nur weil ich dieses überlesen habe muss nicht gleich so n abfälliger kommentar kommen.. für was is das hier ein forum wenn man nicht fragen darf?..  ???:L


----------



## Roar (16. Jun 2004)

mike hat gesagt.:
			
		

> btw. ich arbeite mit der api.. nur weil ich dieses überlesen habe muss nicht gleich so n abfälliger kommentar kommen.. für was is das hier ein forum wenn man nicht fragen darf?..  ???:L



ich mein ja nur... der beitrag steht hier schon seit 4 monaten  ???:L 

warum das bei dir nicht geht weiß ich nicht. folgendes geht jedenfalls bei mir (erkennt wenn scrollbar nach ganz unten gescrollt wurde; die methodenaufrufe und lastValue und so sind für dich eigentlich irrelevant):


```
verticalScrollBar.addAdjustmentListener(new AdjustmentListener() {
			
			private int lastValue = 0;
			
			public void adjustmentValueChanged(AdjustmentEvent e) {
				boolean down = lastValue < e.getValue();
				if(down) {
					if(verticalScrollBar.getValue() + verticalScrollBar.getModel().getExtent() == verticalScrollBar.getMaximum()) {
						getModel().addRow();
						revalidate();
					}
				} else if(!down && lastValue != e.getValue()) {
					getModel().removeLastRow();
					revalidate();
				}
				sizeRowIdentifierToFit(verticalScrollBar.getValue() + verticalScrollBar.getModel().getExtent());
				lastValue = e.getValue();
			}
		});
```


----------



## mike (16. Jun 2004)

zu den 4 Monaten.. japp stimmt schon.. aber ich dacht mir das is dann der letzte feinschliff @ chat da lass ich mir erstmal zeit.. und um nicht unnötig einen neuen post zu öffnen.. hab ich halt jetzt mal wieder geschrieben, weil ich mich zur zeit damit wieder befasse zwischen durch.. so viel dazu.. 

aber ich muss hinzusagen.. besser als wie nur mit getMaximum() is es schon geworden.. thx


----------



## mike (16. Jun 2004)

ich find einfach keine möglichkeit die CaretPosition auf die letzte zeile zu setzen 

hab doch hier schon gelesen das des einer gemacht hat und funktioniert hat.. nur da steht nich wie.. irgendeiner muss des doch wissen.. in api find ich au irgendwie keine richtiung wie ich des ermitteln könnte..


----------



## mike (17. Jun 2004)

The Last Spam  :wink: 

alsooo falls es wen intressiert.. oder auch für dich Roar..

Es geht super-einwandfrei-spitze, wenn man vor dem scrolling einfach mal einen kleinen sleep auf den thread setzt.. habs jetzt mal auf 100 millisekunden gesetzt... von der performace spührt man überhaupt nichts.. ausser wenn der wert höher ist.. dann dauert es umsolänger bis der text geinsertet wird neu.. weil er noch schläft ;o) 

Aber wenigstens wird jetzt gescrollt richtig. Dein befehl Roar ist auch spitze.. ich denke aber das nur getMaximum() reichen würde.. probier ich mal bei gelegenheit. Weil hatte ja so selbes ergebnis, wie mit Extent auch.. trotzdem danke !


----------

