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.
Example
|
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 JavaBeans™ has been added to the java.beans
package. Please see XMLEncoder
.