Provides a scrollable view of a lightweight component. A
manages a viewport, optional vertical and horizontal scroll bars, and optional row and column heading viewports. You can find task-oriented documentation of
in How to Use Scroll Panes
, a section in The Java Tutorial
. Note that
does not support heavyweight components.
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
basically consists of
, 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
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
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.
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
getScrollableTracksViewportHeightis 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