|
|
Listing 15.2 The Scrollable Interface
public interface Scrollable
{
/**
* Returns the preferred size of the viewport for a view component.
* For example the preferred size of a JList component is the size
* required to accommodate all of the cells in its list, however the
* value of preferredScrollableViewportSize is the size required for
* JList.getVisibleRowCount() rows. A component without any
* properties that would affect the viewport size should just return
* getPreferredSize() here.
*
* @return The preferredSize of a JViewport whose view is this
* Scrollable.
* @see JViewport#getPreferredSize
*/
Dimension getPreferredScrollableViewportSize();
/**
* Components that display logical rows or columns should compute
* the scroll increment that will completely expose one new row
* or column, depending on the value of orientation. Ideally,
* components should handle a partially exposed row or column by
* returning the distance required to completely expose the item.
* <p>
* Scrolling containers, like JScrollPane, will use this method
* each time the user requests a unit scroll.
*
* @param visibleRect The view area visible within the viewport
* @param orientation Either SwingConstants.VERTICAL or
SwingConstants.HORIZONTAL.
* @param direction Less than zero to scroll up/left, greater
* than zero for down/right.
* @return The "unit" increment for scrolling in the specified
* direction
* @see JScrollBar#setUnitIncrement
*/
int getScrollableUnitIncrement( Rectangle visibleRect,
int orientation, int direction);
/**
* Components that display logical rows or columns should compute
* the scroll increment that will completely expose one block
* of rows or columns, depending on the value of orientation.
* <p>
* Scrolling containers, like JScrollPane, will use this method
* each time the user requests a block scroll.
*
* @param visibleRect The view area visible within the viewport
* @param orientation Either SwingConstants.VERTICAL or
* SwingConstants.HORIZONTAL.
* @param direction Less than zero to scroll up/left, greater
* than zero for down/right.
* @return The "block" increment for scrolling in the
* specified direction.
* @see JScrollBar#setBlockIncrement
*/
int getScrollableBlockIncrement( Rectangle visibleRect,
int orientation, int direction );
/**
* Return true if a viewport should always force the width of this
* Scrollable to match the width of the viewport. For example a
* normal text view that supported line wrapping would return true
* here, since it would be undesirable for wrapped lines to disappear
* beyond the right edge of the viewport. Note that returning true
* for a Scrollable whose ancestor is a JScrollPane effectively
* disables horizontal scrolling.
* <p>
* Scrolling containers, like JViewport, will use this method each
* time they are validated.
*
* @return True if a viewport should force the Scrollables width
* to match its own.
*/
boolean getScrollableTracksViewportWidth();
/**
* Return true if a viewport should always force the height of this
* Scrollable to match the height of the viewport. For example a
* columnar text view that flowed text in left to right columns
* could effectively disable vertical scrolling by returning
* true here.
* <p>
* Scrolling containers, like JViewport, will use this method each
* time they are validated.
*
* @return True if a viewport should force the Scrollables height
* to match its own.
*/
boolean getScrollableTracksViewportHeight();
}
Summary
The JFC provides rich support for scrolling components. The JScrollPane class manages a viewport, scrollbars, headers, and corner components. These components work together to allow any component to be scrolled. The JViewport class occupies the center region of the scroll pane. The viewport can contain a single child. That child is the component that is scrolled. The viewport acts as a window where a portion of the child component can be seen. As the component is scrolled, different portions of the child component are displayed. A backing store can be used to enhance scrolling. When enabled, an offscreen image is created and used for painting. The scrolling policy can be set to only display the scrollbars when they are needed, to always display the scrollbars, or to never display the scrollbars. The JScrollPane class is a validated root container.
|