Advanced   Java   Services JViewport Back Next Up Home


Grundlegende Eigenschaften

Ein JViewport ist ein Container, der genau eine Komponente aufnehmen kann. Die aufgenommene Komponente ist in der Regel größer als das JViewport selbst und JViewport stellt nur einen Ausschnitt dieser Komponente dar. Mit der Methode setViewPosition() kann man den Ausschnitt verschieben. Die Methode getExtentSize() liefert die Größe des Ausschnitts, also die Größe des Viewports. Die Methode getViewSize() liefert die Größe der Komponente. JViewport ist das Herzstück eines JScrollPane. Eon JScrollPane ist im wesentlichen ein JViewport mit zwei Scrollbalken. Dabei werden die Scrollbalken automatisch so eingestellt, daß man mit ihnen die ganze Komponente abfahren kann.

Konstruktoren
JViewport() Creates a JViewport.
Einige Methoden
ReturntypName der Methode
void
 
 
addChangeListener(ChangeListener l)
Adds a ChangeListener to the list that is notified each time the view's size, position, or the viewport's extent size has changed.
void
 
 
removeChangeListener(ChangeListener l)
Removes a ChangeListener from the list that's notified each time the views size, position, or the viewports extent size has changed.
Dimension
 
getExtentSize()
Returns the size of the visible part of the view in view coordinates.
void
 
setExtentSize(Dimension newExtent)
Sets the size of the visible part of the view using view coordinates.
int
 
getScrollMode()
Returns the current scrolling mode.
void
 
setScrollMode(int mode)
Used to control the method of scrolling the viewport contents.
Component
 
getView()
Returns the JViewport's one child or null.
void
 
setView(Component view)
Sets the JViewport's one lightweight child (view), which can be null.
void
 
remove(Component child)
Removes the Viewports one lightweight child.
Point
 
getViewPosition()
Returns the view coordinates that appear in the upper left hand corner of the viewport, or 0,0 if there's no view.
void
 
setViewPosition(Point p)
Sets the view coordinates that appear in the upper left hand corner of the viewport, does nothing if there's no view.
Rectangle
 
getViewRect()
Returns a rectangle whose origin is getViewPosition and size is getExtentSize.
Dimension
 
getViewSize()
If the view's size hasn't been explicitly set, return the preferred size, otherwise return the view's current size.
void
 
setViewSize(Dimension newSize)
Sets the size of the view.
void
 
scrollRectToVisible(Rectangle contentRect)
Scrolls the view so that Rectangle within the view becomes visible.


Zwei Koordinatensysteme

Um mit JViewport richtig arbeiten zu können, muß man wissen, daß man es hier mit zwei Koordinatensytemen zu tun hat, die gegeneinander verschoben sind. Die nächste Graphik soll das verdeutlichen. Das JViewport ist blau umrandet und zeigt einen Ausschnitt aus dem Bild. Das Bild liegt auf einer Komponente, meist auf einem JLabel und das JLabel hat die Größe des Bildes. Die linke obere Ecke des JViewports (blau) ist der Nullpunkt des ersten Koordinatensystems (KS1), die linke obere Ecke der Komponente auf dem das Bild liegt ist das zweite Koordinatensystem (KS2). Die beiden Systeme seien in x-Richtung um 70 Pixel und in y-Richtung um 30 Pixel gegeneinander verschoben. Gemessen von KS1 aus hat der Nullpunkt von KS2 die Koordinaten (70,30). Gemessen von KS2 aus hat der Nullpunkt von KS1 die Koordinaten (-70,-30). Man muß tatsächlich beide Koordinatensystemen berücksichtigen. So liefert die Methode jviewport.getViewPosition() die Koordinaten (-70,-30) gemessen im System KS2, während mouseEvent.getPoint() für die gleiche Stelle (70,30) liefert und damit in KS1 mißt.

JViewport.jpg

Eine Verschiebung des Ausschnitts erreicht man mit der Methode setViewPosition(). Da setViewPosition() als Nullpunkt die linke obere Ecke der zu verschiebenden Komponente nimmt, erreicht man eine Verschiebung nach rechts oder nach unten durch negative Koordinaten, eine Verschiebung nach links oder oben durch positive Koordinaten. Beim Verschieben nach links oder oben muß man zudem beachten, daß man nur so weit verschieben kann, bis der untere (rechte) Rand der Komponente den unteren (rechten) Rand des JViewports erreicht. Will man also den Effekt haben, daß man ein Bild auch nach oben oder links aus dem Viewport herausschieben kann, so muß man die Komponente größer als das Bild machen und das Bild in die linke obere Ecke legen. Wir werden das mit einem Applet demonstrieren.



Verschieben eines JLabels mit Hilfe von Buttons

Das folgende JApplet ist ein JViewport, das ein JLabel enthält. Das Label hat die Größe des Bildes und ist mit einem Rand versehen. Mit den vier Buttons kann man das das Label in alle vier Himmelsrichtungen schieben. man wird feststellen, daß man nach oben und nach links das Label nicht aus dem Sichtausschnitt herausschieben kann. Für das Verschieben ist ein Thread zuständig, der gestartet wird, sobald man auf einen Button drückt und der beendet wird, sobald man den Button loßläßt.

Das nächste Beispiel bringt eine Variation. Das JLabel läßt sich nun mit der Maus verschieben (drag) Das JLabel wurde stark vergrößert und das Bild liegt an der linken oberen Ecke des Labels. das Ende der Labelfläche ist durch den roten Rand verdeutlicht. Nun kann man das Bild nach oben und nach links fast vollständig aus dem Ausschnitt herausziehen, den JViewport anbietet. Aber auch hier kann man nur soweit schieben, bis der untere (rechte) Rand des Labels den unteren (rechten) Rand des Viewport erreicht hat.

Valid XHTML 1.0 Strict Copyright Dipl.Math. H.M.Straub top Back Next Up Home