< prev index next >
src/java.desktop/share/classes/javax/swing/ScrollPaneLayout.java
Print this page
*** 36,57 ****
import java.awt.Insets;
import java.io.Serializable;
/**
! * The layout manager used by <code>JScrollPane</code>.
! * <code>JScrollPaneLayout</code> is
* responsible for nine components: a viewport, two scrollbars,
* a row header, a column header, and four "corner" components.
* <p>
* <strong>Warning:</strong>
* 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 <code>java.beans</code> package.
* Please see {@link java.beans.XMLEncoder}.
*
* @see JScrollPane
* @see JViewport
*
--- 36,57 ----
import java.awt.Insets;
import java.io.Serializable;
/**
! * The layout manager used by {@code JScrollPane}.
! * {@code JScrollPaneLayout} is
* responsible for nine components: a viewport, two scrollbars,
* a row header, a column header, and four "corner" components.
* <p>
* <strong>Warning:</strong>
* 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 {@code java.beans} package.
* Please see {@link java.beans.XMLEncoder}.
*
* @see JScrollPane
* @see JViewport
*
*** 63,167 ****
implements LayoutManager, ScrollPaneConstants, Serializable
{
/**
* The scrollpane's viewport child.
! * Default is an empty <code>JViewport</code>.
* @see JScrollPane#setViewport
*/
protected JViewport viewport;
/**
* The scrollpane's vertical scrollbar child.
! * Default is a <code>JScrollBar</code>.
* @see JScrollPane#setVerticalScrollBar
*/
protected JScrollBar vsb;
/**
* The scrollpane's horizontal scrollbar child.
! * Default is a <code>JScrollBar</code>.
* @see JScrollPane#setHorizontalScrollBar
*/
protected JScrollBar hsb;
/**
! * The row header child. Default is <code>null</code>.
* @see JScrollPane#setRowHeader
*/
protected JViewport rowHead;
/**
! * The column header child. Default is <code>null</code>.
* @see JScrollPane#setColumnHeader
*/
protected JViewport colHead;
/**
* The component to display in the lower left corner.
! * Default is <code>null</code>.
* @see JScrollPane#setCorner
*/
protected Component lowerLeft;
/**
* The component to display in the lower right corner.
! * Default is <code>null</code>.
* @see JScrollPane#setCorner
*/
protected Component lowerRight;
/**
* The component to display in the upper left corner.
! * Default is <code>null</code>.
* @see JScrollPane#setCorner
*/
protected Component upperLeft;
/**
* The component to display in the upper right corner.
! * Default is <code>null</code>.
* @see JScrollPane#setCorner
*/
protected Component upperRight;
/**
* The display policy for the vertical scrollbar.
! * The default is <code>ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED</code>.
* <p>
! * This field is obsolete, please use the <code>JScrollPane</code> field instead.
*
* @see JScrollPane#setVerticalScrollBarPolicy
*/
protected int vsbPolicy = VERTICAL_SCROLLBAR_AS_NEEDED;
/**
* The display policy for the horizontal scrollbar.
! * The default is <code>ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED</code>.
* <p>
! * This field is obsolete, please use the <code>JScrollPane</code> field instead.
*
* @see JScrollPane#setHorizontalScrollBarPolicy
*/
protected int hsbPolicy = HORIZONTAL_SCROLLBAR_AS_NEEDED;
/**
* This method is invoked after the ScrollPaneLayout is set as the
! * LayoutManager of a <code>JScrollPane</code>.
* It initializes all of the internal fields that
! * are ordinarily set by <code>addLayoutComponent</code>. For example:
* <pre>
* ScrollPaneLayout mySPLayout = new ScrollPanelLayout() {
* public void layoutContainer(Container p) {
* super.layoutContainer(p);
* // do some extra work here ...
--- 63,167 ----
implements LayoutManager, ScrollPaneConstants, Serializable
{
/**
* The scrollpane's viewport child.
! * Default is an empty {@code JViewport}.
* @see JScrollPane#setViewport
*/
protected JViewport viewport;
/**
* The scrollpane's vertical scrollbar child.
! * Default is a {@code JScrollBar}.
* @see JScrollPane#setVerticalScrollBar
*/
protected JScrollBar vsb;
/**
* The scrollpane's horizontal scrollbar child.
! * Default is a {@code JScrollBar}.
* @see JScrollPane#setHorizontalScrollBar
*/
protected JScrollBar hsb;
/**
! * The row header child. Default is {@code null}.
* @see JScrollPane#setRowHeader
*/
protected JViewport rowHead;
/**
! * The column header child. Default is {@code null}.
* @see JScrollPane#setColumnHeader
*/
protected JViewport colHead;
/**
* The component to display in the lower left corner.
! * Default is {@code null}.
* @see JScrollPane#setCorner
*/
protected Component lowerLeft;
/**
* The component to display in the lower right corner.
! * Default is {@code null}.
* @see JScrollPane#setCorner
*/
protected Component lowerRight;
/**
* The component to display in the upper left corner.
! * Default is {@code null}.
* @see JScrollPane#setCorner
*/
protected Component upperLeft;
/**
* The component to display in the upper right corner.
! * Default is {@code null}.
* @see JScrollPane#setCorner
*/
protected Component upperRight;
/**
* The display policy for the vertical scrollbar.
! * The default is {@code ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED}.
* <p>
! * This field is obsolete, please use the {@code JScrollPane} field instead.
*
* @see JScrollPane#setVerticalScrollBarPolicy
*/
protected int vsbPolicy = VERTICAL_SCROLLBAR_AS_NEEDED;
/**
* The display policy for the horizontal scrollbar.
! * The default is {@code ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED}.
* <p>
! * This field is obsolete, please use the {@code JScrollPane} field instead.
*
* @see JScrollPane#setHorizontalScrollBarPolicy
*/
protected int hsbPolicy = HORIZONTAL_SCROLLBAR_AS_NEEDED;
/**
* This method is invoked after the ScrollPaneLayout is set as the
! * LayoutManager of a {@code JScrollPane}.
* It initializes all of the internal fields that
! * are ordinarily set by {@code addLayoutComponent}. For example:
* <pre>
* ScrollPaneLayout mySPLayout = new ScrollPanelLayout() {
* public void layoutContainer(Container p) {
* super.layoutContainer(p);
* // do some extra work here ...
*** 190,206 ****
/**
* Removes an existing component. When a new component, such as
* the left corner, or vertical scrollbar, is added, the old one,
* if it exists, must be removed.
* <p>
! * This method returns <code>newC</code>. If <code>oldC</code> is
! * not equal to <code>newC</code> and is non-<code>null</code>,
* it will be removed from its parent.
*
! * @param oldC the <code>Component</code> to replace
! * @param newC the <code>Component</code> to add
! * @return the <code>newC</code>
*/
protected Component addSingletonComponent(Component oldC, Component newC)
{
if ((oldC != null) && (oldC != newC)) {
oldC.getParent().remove(oldC);
--- 190,206 ----
/**
* Removes an existing component. When a new component, such as
* the left corner, or vertical scrollbar, is added, the old one,
* if it exists, must be removed.
* <p>
! * This method returns {@code newC}. If {@code oldC} is
! * not equal to {@code newC} and is non-{@code null},
* it will be removed from its parent.
*
! * @param oldC the {@code Component} to replace
! * @param newC the {@code Component} to add
! * @return the {@code newC}
*/
protected Component addSingletonComponent(Component oldC, Component newC)
{
if ((oldC != null) && (oldC != newC)) {
oldC.getParent().remove(oldC);
*** 224,234 ****
* <li>ScrollPaneConstants.UPPER_RIGHT_CORNER
* </ul>
*
* @param s the component identifier
* @param c the component to be added
! * @exception IllegalArgumentException if <code>s</code> is an invalid key
*/
public void addLayoutComponent(String s, Component c)
{
if (s.equals(VIEWPORT)) {
viewport = (JViewport)addSingletonComponent(viewport, c);
--- 224,234 ----
* <li>ScrollPaneConstants.UPPER_RIGHT_CORNER
* </ul>
*
* @param s the component identifier
* @param c the component to be added
! * @exception IllegalArgumentException if {@code s} is an invalid key
*/
public void addLayoutComponent(String s, Component c)
{
if (s.equals(VIEWPORT)) {
viewport = (JViewport)addSingletonComponent(viewport, c);
*** 317,332 ****
* <ul>
* <li>ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED
* <li>ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER
* <li>ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS
* </ul>
! * Note: Applications should use the <code>JScrollPane</code> version
* of this method. It only exists for backwards compatibility
* with the Swing 1.0.2 (and earlier) versions of this class.
*
* @param x an integer giving the display policy
! * @exception IllegalArgumentException if <code>x</code> is an invalid
* vertical scroll bar policy, as listed above
*/
public void setVerticalScrollBarPolicy(int x) {
switch (x) {
case VERTICAL_SCROLLBAR_AS_NEEDED:
--- 317,332 ----
* <ul>
* <li>ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED
* <li>ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER
* <li>ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS
* </ul>
! * Note: Applications should use the {@code JScrollPane} version
* of this method. It only exists for backwards compatibility
* with the Swing 1.0.2 (and earlier) versions of this class.
*
* @param x an integer giving the display policy
! * @exception IllegalArgumentException if {@code x} is an invalid
* vertical scroll bar policy, as listed above
*/
public void setVerticalScrollBarPolicy(int x) {
switch (x) {
case VERTICAL_SCROLLBAR_AS_NEEDED:
*** 355,370 ****
* The options are:<ul>
* <li>ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED
* <li>ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER
* <li>ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS
* </ul>
! * Note: Applications should use the <code>JScrollPane</code> version
* of this method. It only exists for backwards compatibility
* with the Swing 1.0.2 (and earlier) versions of this class.
*
* @param x an int giving the display policy
! * @exception IllegalArgumentException if <code>x</code> is not a valid
* horizontal scrollbar policy, as listed above
*/
public void setHorizontalScrollBarPolicy(int x) {
switch (x) {
case HORIZONTAL_SCROLLBAR_AS_NEEDED:
--- 355,370 ----
* The options are:<ul>
* <li>ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED
* <li>ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER
* <li>ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS
* </ul>
! * Note: Applications should use the {@code JScrollPane} version
* of this method. It only exists for backwards compatibility
* with the Swing 1.0.2 (and earlier) versions of this class.
*
* @param x an int giving the display policy
! * @exception IllegalArgumentException if {@code x} is not a valid
* horizontal scrollbar policy, as listed above
*/
public void setHorizontalScrollBarPolicy(int x) {
switch (x) {
case HORIZONTAL_SCROLLBAR_AS_NEEDED:
*** 377,441 ****
}
}
/**
! * Returns the <code>JViewport</code> object that displays the
* scrollable contents.
! * @return the <code>JViewport</code> object that displays the scrollable contents
* @see JScrollPane#getViewport
*/
public JViewport getViewport() {
return viewport;
}
/**
! * Returns the <code>JScrollBar</code> object that handles horizontal scrolling.
! * @return the <code>JScrollBar</code> object that handles horizontal scrolling
* @see JScrollPane#getHorizontalScrollBar
*/
public JScrollBar getHorizontalScrollBar() {
return hsb;
}
/**
! * Returns the <code>JScrollBar</code> object that handles vertical scrolling.
! * @return the <code>JScrollBar</code> object that handles vertical scrolling
* @see JScrollPane#getVerticalScrollBar
*/
public JScrollBar getVerticalScrollBar() {
return vsb;
}
/**
! * Returns the <code>JViewport</code> object that is the row header.
! * @return the <code>JViewport</code> object that is the row header
* @see JScrollPane#getRowHeader
*/
public JViewport getRowHeader() {
return rowHead;
}
/**
! * Returns the <code>JViewport</code> object that is the column header.
! * @return the <code>JViewport</code> object that is the column header
* @see JScrollPane#getColumnHeader
*/
public JViewport getColumnHeader() {
return colHead;
}
/**
! * Returns the <code>Component</code> at the specified corner.
! * @param key the <code>String</code> specifying the corner
! * @return the <code>Component</code> at the specified corner, as defined in
! * {@link ScrollPaneConstants}; if <code>key</code> is not one of the
! * four corners, <code>null</code> is returned
* @see JScrollPane#getCorner
*/
public Component getCorner(String key) {
if (key.equals(LOWER_LEFT_CORNER)) {
return lowerLeft;
--- 377,441 ----
}
}
/**
! * Returns the {@code JViewport} object that displays the
* scrollable contents.
! * @return the {@code JViewport} object that displays the scrollable contents
* @see JScrollPane#getViewport
*/
public JViewport getViewport() {
return viewport;
}
/**
! * Returns the {@code JScrollBar} object that handles horizontal scrolling.
! * @return the {@code JScrollBar} object that handles horizontal scrolling
* @see JScrollPane#getHorizontalScrollBar
*/
public JScrollBar getHorizontalScrollBar() {
return hsb;
}
/**
! * Returns the {@code JScrollBar} object that handles vertical scrolling.
! * @return the {@code JScrollBar} object that handles vertical scrolling
* @see JScrollPane#getVerticalScrollBar
*/
public JScrollBar getVerticalScrollBar() {
return vsb;
}
/**
! * Returns the {@code JViewport} object that is the row header.
! * @return the {@code JViewport} object that is the row header
* @see JScrollPane#getRowHeader
*/
public JViewport getRowHeader() {
return rowHead;
}
/**
! * Returns the {@code JViewport} object that is the column header.
! * @return the {@code JViewport} object that is the column header
* @see JScrollPane#getColumnHeader
*/
public JViewport getColumnHeader() {
return colHead;
}
/**
! * Returns the {@code Component} at the specified corner.
! * @param key the {@code String} specifying the corner
! * @return the {@code Component} at the specified corner, as defined in
! * {@link ScrollPaneConstants}; if {@code key} is not one of the
! * four corners, {@code null} is returned
* @see JScrollPane#getCorner
*/
public Component getCorner(String key) {
if (key.equals(LOWER_LEFT_CORNER)) {
return lowerLeft;
*** 454,473 ****
}
}
/**
! * The preferred size of a <code>ScrollPane</code> is the size of the insets,
* plus the preferred size of the viewport, plus the preferred size of
* the visible headers, plus the preferred size of the scrollbars
* that will appear given the current view and the current
* scrollbar displayPolicies.
* <p>Note that the rowHeader is calculated as part of the preferred width
* and the colHeader is calculated as part of the preferred size.
*
! * @param parent the <code>Container</code> that will be laid out
! * @return a <code>Dimension</code> object specifying the preferred size of the
* viewport and any scrollbars
* @see ViewportLayout
* @see LayoutManager
*/
public Dimension preferredLayoutSize(Container parent)
--- 454,473 ----
}
}
/**
! * The preferred size of a {@code ScrollPane} is the size of the insets,
* plus the preferred size of the viewport, plus the preferred size of
* the visible headers, plus the preferred size of the scrollbars
* that will appear given the current view and the current
* scrollbar displayPolicies.
* <p>Note that the rowHeader is calculated as part of the preferred width
* and the colHeader is calculated as part of the preferred size.
*
! * @param parent the {@code Container} that will be laid out
! * @return a {@code Dimension} object specifying the preferred size of the
* viewport and any scrollbars
* @see ViewportLayout
* @see LayoutManager
*/
public Dimension preferredLayoutSize(Container parent)
*** 582,599 ****
return new Dimension(prefWidth, prefHeight);
}
/**
! * The minimum size of a <code>ScrollPane</code> is the size of the insets
* plus minimum size of the viewport, plus the scrollpane's
* viewportBorder insets, plus the minimum size
* of the visible headers, plus the minimum size of the
* scrollbars whose displayPolicy isn't NEVER.
*
! * @param parent the <code>Container</code> that will be laid out
! * @return a <code>Dimension</code> object specifying the minimum size
*/
public Dimension minimumLayoutSize(Container parent)
{
/* Sync the (now obsolete) policy fields with the
* JScrollPane.
--- 582,599 ----
return new Dimension(prefWidth, prefHeight);
}
/**
! * The minimum size of a {@code ScrollPane} is the size of the insets
* plus minimum size of the viewport, plus the scrollpane's
* viewportBorder insets, plus the minimum size
* of the visible headers, plus the minimum size of the
* scrollbars whose displayPolicy isn't NEVER.
*
! * @param parent the {@code Container} that will be laid out
! * @return a {@code Dimension} object specifying the minimum size
*/
public Dimension minimumLayoutSize(Container parent)
{
/* Sync the (now obsolete) policy fields with the
* JScrollPane.
*** 670,688 ****
*
* <li> The column header, if present and visible, gets its preferred
* height and the viewport's width.
*
* <li> If a vertical scrollbar is needed, i.e. if the viewport's extent
! * height is smaller than its view height or if the <code>displayPolicy</code>
* is ALWAYS, it's treated like the row header with respect to its
* dimensions and is made visible.
*
* <li> If a horizontal scrollbar is needed, it is treated like the
* column header (see the paragraph above regarding the vertical scrollbar).
*
! * <li> If the scrollpane has a non-<code>null</code>
! * <code>viewportBorder</code>, then space is allocated for that.
*
* <li> The viewport gets the space available after accounting for
* the previous constraints.
*
* <li> The corner components, if provided, are aligned with the
--- 670,688 ----
*
* <li> The column header, if present and visible, gets its preferred
* height and the viewport's width.
*
* <li> If a vertical scrollbar is needed, i.e. if the viewport's extent
! * height is smaller than its view height or if the {@code displayPolicy}
* is ALWAYS, it's treated like the row header with respect to its
* dimensions and is made visible.
*
* <li> If a horizontal scrollbar is needed, it is treated like the
* column header (see the paragraph above regarding the vertical scrollbar).
*
! * <li> If the scrollpane has a non-{@code null}
! * {@code viewportBorder}, then space is allocated for that.
*
* <li> The viewport gets the space available after accounting for
* the previous constraints.
*
* <li> The corner components, if provided, are aligned with the
*** 690,700 ****
* scrollbar, the right corners appear; if there is a horizontal
* scrollbar, the lower corners appear; a row header gets left
* corners, and a column header gets upper corners.
* </ul>
*
! * @param parent the <code>Container</code> to lay out
*/
public void layoutContainer(Container parent)
{
/* Sync the (now obsolete) policy fields with the
* JScrollPane.
--- 690,700 ----
* scrollbar, the right corners appear; if there is a horizontal
* scrollbar, the lower corners appear; a row header gets left
* corners, and a column header gets upper corners.
* </ul>
*
! * @param parent the {@code Container} to lay out
*/
public void layoutContainer(Container parent)
{
/* Sync the (now obsolete) policy fields with the
* JScrollPane.
*** 1041,1055 ****
colHeadR.height);
}
}
/**
! * Adjusts the <code>Rectangle</code> <code>available</code> based on if
! * the vertical scrollbar is needed (<code>wantsVSB</code>).
! * The location of the vsb is updated in <code>vsbR</code>, and
! * the viewport border insets (<code>vpbInsets</code>) are used to offset
! * the vsb. This is only called when <code>wantsVSB</code> has
* changed, eg you shouldn't invoke adjustForVSB(true) twice.
*/
private void adjustForVSB(boolean wantsVSB, Rectangle available,
Rectangle vsbR, Insets vpbInsets,
boolean leftToRight) {
--- 1041,1055 ----
colHeadR.height);
}
}
/**
! * Adjusts the {@code Rectangle available} based on if
! * the vertical scrollbar is needed ({@code wantsVSB}).
! * The location of the vsb is updated in {@code vsbR}, and
! * the viewport border insets ({@code vpbInsets}) are used to offset
! * the vsb. This is only called when {@code wantsVSB} has
* changed, eg you shouldn't invoke adjustForVSB(true) twice.
*/
private void adjustForVSB(boolean wantsVSB, Rectangle available,
Rectangle vsbR, Insets vpbInsets,
boolean leftToRight) {
*** 1072,1086 ****
available.width += oldWidth;
}
}
/**
! * Adjusts the <code>Rectangle</code> <code>available</code> based on if
! * the horizontal scrollbar is needed (<code>wantsHSB</code>).
! * The location of the hsb is updated in <code>hsbR</code>, and
! * the viewport border insets (<code>vpbInsets</code>) are used to offset
! * the hsb. This is only called when <code>wantsHSB</code> has
* changed, eg you shouldn't invoked adjustForHSB(true) twice.
*/
private void adjustForHSB(boolean wantsHSB, Rectangle available,
Rectangle hsbR, Insets vpbInsets) {
int oldHeight = hsbR.height;
--- 1072,1086 ----
available.width += oldWidth;
}
}
/**
! * Adjusts the {@code Rectangle available} based on if
! * the horizontal scrollbar is needed ({@code wantsHSB}).
! * The location of the hsb is updated in {@code hsbR}, and
! * the viewport border insets ({@code vpbInsets}) are used to offset
! * the hsb. This is only called when {@code wantsHSB} has
* changed, eg you shouldn't invoked adjustForHSB(true) twice.
*/
private void adjustForHSB(boolean wantsHSB, Rectangle available,
Rectangle hsbR, Insets vpbInsets) {
int oldHeight = hsbR.height;
*** 1104,1120 ****
* viewport.
*
* @param scrollpane an instance of the {@code JScrollPane}
* @return the size and position of the viewport border
* @deprecated As of JDK version Swing1.1
! * replaced by <code>JScrollPane.getViewportBorderBounds()</code>.
*/
@Deprecated
public Rectangle getViewportBorderBounds(JScrollPane scrollpane) {
return scrollpane.getViewportBorderBounds();
}
/**
! * The UI resource version of <code>ScrollPaneLayout</code>.
*/
public static class UIResource extends ScrollPaneLayout implements javax.swing.plaf.UIResource {}
}
--- 1104,1120 ----
* viewport.
*
* @param scrollpane an instance of the {@code JScrollPane}
* @return the size and position of the viewport border
* @deprecated As of JDK version Swing1.1
! * replaced by {@code JScrollPane.getViewportBorderBounds()}.
*/
@Deprecated
public Rectangle getViewportBorderBounds(JScrollPane scrollpane) {
return scrollpane.getViewportBorderBounds();
}
/**
! * The UI resource version of {@code ScrollPaneLayout}.
*/
public static class UIResource extends ScrollPaneLayout implements javax.swing.plaf.UIResource {}
}
< prev index next >