Eine Scrollpane ist prinzipiell dasselbe wie ein Panel. Der Unterschied beteht darin, daß eine scrollpane bereits zwei Scrollbars intergriert hat, die es erlauben, den Inhalt des Panels zu scrollen. Somit kann eine Scrollpane viel größere Elemente aufnehmen, als sie eigentlich darstellen kann. Da eine Scrollbar nur aus bereits bekannten Elementen aufgebaut ist, sind alle Funktionen bereits bekannt. Das folgende Beispiel erzeugt eine einfache Graphik, die durch die Scrollbars durch das Sichtfenster verschoben werden kann:
/* Example scollpane.c */ : frame = j_frame("Scrollpane Demo",200,220); j_borderlayout(frame); scrollpane = j_scrollpane(frame); vscroll = j_vscrollbar(scrollpane); hscroll = j_hscrollbar(scrollpane); canvas=j_canvas(scrollpane); j_setsize(scrollpane,180,150); j_setsize(canvas,400,400); j_show(frame); for(x=0;x<400;x+=10) { j_drawline(canvas,x,0,0,400-x); j_drawline(canvas,x,400,400,400-x); } while(1) { obj=j_nextaction(); if(obj==scrollpane) { width =j_viewportwidth(scrollpane); height=j_viewportheight(scrollpane); } if(obj==hscroll) x=j_getvalue(hscroll); if(obj==vscroll) y=j_getvalue(vscroll); printf("Viewport X = %d:%d (Width = %d)\n",x,x+width ,width); printf(" Y = %d:%d (Height = %d)\n",y,y+height,height); if(obj == frame) break; } :
Auch in diesem Beispiel wird dem Frame zunächst ein Border Layoutmanager zugeteilt, der sicherstellt, daß bei einer Größenänderung des umgebenden Frames das enthaltene Scrollpane diese Größe zugeordnet bekommt. In den nächsten Anweisungen wird das Scrollpane erzeugt, und die EventID's der beiden Scrollbars ermittelt:
scrollpane = j_scrollpane(frame); vscroll = j_vscrollbar(scrollpane); hscroll = j_hscrollbar(scrollpane);
Die Scrollbars werden bereits durch die Funktion j_scrollpane() erzeugt. Der Aufruf der beiden Funktionen j_vscrollbar() und j_hscrollbar() weist den scrollbars lediglich die benötigten Event Identifier zu. Da das Scollen des enthaltenen Elements automatisch erfolgt, wird diese Zuweisung von EventID's in der Regel nicht benötig.
Nach dem Erzeugen eines Canvas für die Graphik, wird der Scrollpane eine Fläche zugewiesen, die sich von der des Canvas unterscheidet:
j_setsize(scrollpane,180,150); j_setsize(canvas,400,400);
Man erkennt, daß der Canvas eine deutlich größere Fläche einnimmt, als das Scrollpane. Mit diesen Anweisungen ist die eigentliche Programmierung bereits erledigt. Nach dem Anzeigen der Applikation kann der Canvas im Scrollpane verschoben werden. Die folgende Eventloop im Beispiel dient lediglich dem Ermitteln des akteullen Ausschnitts des sichtbaren Bereichs.
Wie ein Panel, so meldet auch ein Scrollpane einen Event, sobald sich seine Größe verändert. Mit den Funktionen:
width =j_viewportwidth(scrollpane); height=j_viewportheight(scrollpane);
läßt sich dann Höhe und Breite des sichtbaren Bereichs ermitteln.
Sobald einer der beiden Scrollbars bewegt wird, meldet dieser einen entsprechenden Event. Mit der bereits bekannten Funktion:
j_getvalue(int scrollbar);
läßt sich die atuelle Position eines der Schieberegler ermitteln. Somit sich alle Informationen vorhanden, um den sichtbaren Ausschnitt des Gesamtbildes zu berechnen. Im Beispiel wird diese Bereich jeweils durch eine print Anweisung in der Konsole ausgegeben.