Provides a scrollable view of a lightweight component.
A
JScrollPane
manages a viewport, optional
vertical and horizontal scroll bars, and optional row and
column heading viewports.
You can find task-oriented documentation of
JScrollPane
in
How to Use Scroll Panes,
a section in
The Java Tutorial. Note that
JScrollPane
does not support heavyweight components.
The
JViewport
provides a window,
or "viewport" onto a data
source -- for example, a text file. That data source is the
"scrollable client" (aka data model) displayed by the
JViewport
view.
A
JScrollPane
basically consists of
JScrollBar
s,
a
JViewport
, and the wiring between them,
as shown in the diagram at right.
In addition to the scroll bars and viewport,
a JScrollPane
can have a
column header and a row header. Each of these is a
JViewport
object that
you specify with setRowHeaderView
,
and setColumnHeaderView
.
The column header viewport automatically scrolls left and right, tracking
the left-right scrolling of the main viewport.
(It never scrolls vertically, however.)
The row header acts in a similar fashion.
Where two scroll bars meet, the row header meets the column header,
or a scroll bar meets one of the headers, both components stop short
of the corner, leaving a rectangular space which is, by default, empty.
These spaces can potentially exist in any number of the four corners.
In the previous diagram, the top right space is present and identified
by the label "corner component".
Any number of these empty spaces can be replaced by using the
setCorner
method to add a component to a particular corner.
(Note: The same component cannot be added to multiple corners.)
This is useful if there's
some extra decoration or function you'd like to add to the scroll pane.
The size of each corner component is entirely determined by the size of the
headers and/or scroll bars that surround it.
A corner component will only be visible if there is an empty space in that
corner for it to exist in. For example, consider a component set into the
top right corner of a scroll pane with a column header. If the scroll pane's
vertical scrollbar is not present, perhaps because the view component hasn't
grown large enough to require it, then the corner component will not be
shown (since there is no empty space in that corner created by the meeting
of the header and vertical scroll bar). Forcing the scroll bar to always be
shown, using
setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_ALWAYS)
,
will ensure that the space for the corner component always exists.
To add a border around the main viewport,
you can use setViewportBorder
.
(Of course, you can also add a border around the whole scroll pane using
setBorder
.)
A common operation to want to do is to set the background color that will
be used if the main viewport view is smaller than the viewport, or is
not opaque. This can be accomplished by setting the background color
of the viewport, via scrollPane.getViewport().setBackground()
.
The reason for setting the color of the viewport and not the scrollpane
is that by default JViewport
is opaque
which, among other things, means it will completely fill
in its background using its background color. Therefore when
JScrollPane
draws its background the viewport will
usually draw over it.
By default JScrollPane
uses ScrollPaneLayout
to handle the layout of its child Components. ScrollPaneLayout
determines the size to make the viewport view in one of two ways:
- If the view implements
Scrollable
a combination of getPreferredScrollableViewportSize
,
getScrollableTracksViewportWidth
and
getScrollableTracksViewportHeight
is used, otherwise
getPreferredSize
is used.
Warning: Swing is not thread safe. For more
information see Swing's Threading
Policy.
Warning:
Serialized objects of this class will not be compatible with
future Swing releases. The current serialization support is
appropriate for short term storage or RMI between applications running
the same version of Swing. As of 1.4, support for long term storage
of all JavaBeansTM
has been added to the java.beans
package.
Please see XMLEncoder
.