模块  java.desktop
软件包  javax.swing

Class JScrollPane

  • 实现的所有接口
    ImageObserverMenuContainerSerializableAccessibleScrollPaneConstants

    @JavaBean(defaultProperty="UI",
              description="A specialized container that manages a viewport, optional scrollbars and headers")
    public class JScrollPane
    extends JComponent
    implements ScrollPaneConstants, Accessible
    提供轻量级组件的可滚动视图。 A JScrollPane管理视口,可选的垂直和水平滚动条以及可选的行和列标题视口。 您可以在How to Use Scroll Panes (Java教程中的一个部分)中找到JScrollPane的面向任务的文档。 请注意, JScrollPane不支持重量级组件。 Example

    The following text describes this image.

    JViewport在数据源上提供窗口或“视口” - 例如,文本文件。 该数据源是JViewport视图显示的“可滚动客户端”(也称为数据模型)。 A JScrollPane基本上由JScrollBar s, JViewport和它们之间的接线组成,如右图所示。

    除滚动条和视JScrollPaneJScrollPane还可以具有列标题和行标题。 其中每个都是您使用setRowHeaderViewsetColumnHeaderView指定的JViewport对象。 列标题视口自动向左和向右滚动,跟踪主视口的左右滚动。 (但它永远不会垂直滚动。)行标题以类似的方式起作用。

    当两个滚动条相遇时,行标题符合列标题,或者滚动条与其中一个标题相遇,两个组件都停在角落之外,留下一个矩形空间,默认情况下为空。 这些空间可能存在于四个角中的任何数量上。 在上图中,右上方的空格存在并由标签“角落组件”标识。

    可以使用setCorner方法将组件添加到特定角落来替换任意数量的这些空白空间。 (注意:相同的组件不能添加到多个角落。)如果您想要添加到滚动窗格中的一些额外装饰或功能,这将非常有用。 每个角落组件的大小完全由包围它的标题和/或滚动条的大小决定。

    只有当角落中存在空白空间才能存在时,角组件才可见。例如,考虑将组件设置到带有列标题的滚动窗格的右上角。 如果滚动窗格的垂直滚动条不存在,可能是因为视图组件的长度不足以满足要求,因此不会显示角组件(因为标题会议创建的角落中没有空白区域)和垂直滚动条)。 使用setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_ALWAYS)强制始终显示滚动条将确保角部件的空间始终存在。

    要在主视口周围添加边框,可以使用setViewportBorder (当然,您也可以使用setBorder在整个滚动窗格周围添加边框。)

    要做的常见操作是设置主视口视图小于视口时将使用的背景颜色,或者不是不透明的。 这可以通过设置视口的背景颜色来完成,通过scrollPane.getViewport().setBackground() 设置视口颜色而不是滚动窗格的原因是默认情况下JViewport是不透明的,除其他外,它意味着它将使用其背景颜色完全填充其背景。 因此,当JScrollPane绘制其背景时,视口通常会绘制它。

    默认情况下, JScrollPane使用ScrollPaneLayout来处理其子组件的布局。 ScrollPaneLayout确定以两种方式之一制作视口视图的大小:

    1. 如果视图实现Scrollable的组合getPreferredScrollableViewportSizegetScrollableTracksViewportWidthgetScrollableTracksViewportHeight被使用,否则
    2. getPreferredSize

    警告: Swing不是线程安全的。 有关更多信息,请参阅Swing's Threading Policy

    警告:此类的序列化对象与以后的Swing版本不兼容。 当前的序列化支持适用于运行相同版本Swing的应用程序之间的短期存储或RMI。 从1.4开始, java.beans软件包中添加了对所有JavaBeans java.beans长期存储的支持。 请参阅XMLEncoder

    从以下版本开始:
    1.2
    另请参见:
    JScrollBarJViewportScrollPaneLayoutScrollableComponent.getPreferredSize()setViewportView(java.awt.Component)setRowHeaderView(java.awt.Component)setColumnHeaderView(java.awt.Component)setCorner(java.lang.String, java.awt.Component)setViewportBorder(javax.swing.border.Border)Serialized Form
    • 构造方法详细信息

      • JScrollPane

        public JScrollPane​(Component view,
                           int vsbPolicy,
                           int hsbPolicy)
        创建一个JScrollPane ,在视口中显示视图组件,其视图位置可以通过一对滚动条控制。 滚动条策略指定何时显示滚动条,例如,如果vsbPolicyVERTICAL_SCROLLBAR_AS_NEEDED则只有在视图不垂直的情况下才会显示垂直滚动条。 可用的策略设置列在setVerticalScrollBarPolicy(int)setHorizontalScrollBarPolicy(int)
        参数
        view - 要在 view视口中显示的组件
        vsbPolicy - 一个整数,指定垂直滚动条策略
        hsbPolicy - 一个指定水平滚动条策略的整数
        另请参见:
        setViewportView(java.awt.Component)
      • JScrollPane

        public JScrollPane​(Component view)
        创建一个显示指定组件内容的 JScrollPane ,只要组件的内容大于视图,就会出现水平和垂直滚动条。
        参数
        view - 要在滚动窗格的视口中显示的组件
        另请参见:
        setViewportView(java.awt.Component)
      • JScrollPane

        public JScrollPane()
        创建一个空( JScrollPane口视图) JScrollPane ,其中水平和垂直滚动条在需要时出现。
    • 方法详细信息

      • setUI

        public void setUI​(ScrollPaneUI ui)
        设置 ScrollPaneUI对象,该对象提供此组件的外观(L&F)。
        参数
        ui - ScrollPaneUI L&F对象
        另请参见:
        getUI()
      • getVerticalScrollBarPolicy

        public int getVerticalScrollBarPolicy()
        返回垂直滚动条策略值。
        结果
        verticalScrollBarPolicy属性
        另请参见:
        setVerticalScrollBarPolicy(int)
      • setVerticalScrollBarPolicy

        @BeanProperty(preferred=true,
                      enumerationValues={"ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED","ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER","ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS"},
                      description="The scrollpane vertical scrollbar policy")
        public void setVerticalScrollBarPolicy​(int policy)
        确定垂直滚动条何时出现在滚动窗格中。 法律价值观是:
        • ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED
        • ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER
        • ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS
        参数
        policy - 上面列出的三个值之一
        异常
        IllegalArgumentException - 如果 policy不是上面显示的合法值之一
        另请参见:
        getVerticalScrollBarPolicy()
      • getHorizontalScrollBarPolicy

        public int getHorizontalScrollBarPolicy()
        返回水平滚动条策略值。
        结果
        horizontalScrollBarPolicy属性
        另请参见:
        setHorizontalScrollBarPolicy(int)
      • setHorizontalScrollBarPolicy

        @BeanProperty(preferred=true,
                      enumerationValues={"ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED","ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER","ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS"},
                      description="The scrollpane scrollbar policy")
        public void setHorizontalScrollBarPolicy​(int policy)
        确定水平滚动条何时出现在滚动窗格中。 选项是:
        • ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED
        • ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER
        • ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS
        参数
        policy - 上面列出的三个值之一
        异常
        IllegalArgumentException - 如果 policy不是上面显示的合法值之一
        另请参见:
        getHorizontalScrollBarPolicy()
      • setViewportBorder

        @BeanProperty(preferred=true,
                      description="The border around the viewport.")
        public void setViewportBorder​(Border viewportBorder)
        在视口周围添加边框。 请注意,边框未直接在视口上设置, JViewport不支持JComponent边框属性。 同样,设置JScrollPane的视口不会影响viewportBorder属性。

        此属性的默认值由外观实现计算。

        参数
        viewportBorder - 要添加的边框
        另请参见:
        getViewportBorder()setViewport(javax.swing.JViewport)
      • getViewportBorderBounds

        @BeanProperty(bound=false)
        public Rectangle getViewportBorderBounds()
        返回视口边框的边界。
        结果
        指定视口边框的 Rectangle对象
      • createHorizontalScrollBar

        public JScrollBar createHorizontalScrollBar()
        默认情况下返回JScrollPane.ScrollBar 子类可以重写此方法以强制ScrollPaneUI实现使用JScrollBar子类。 ScrollPaneUI实现用于创建水平滚动条。
        结果
        a JScrollBar水平方向
        另请参见:
        JScrollBar
      • createVerticalScrollBar

        public JScrollBar createVerticalScrollBar()
        默认情况下返回JScrollPane.ScrollBar 子类可以重写此方法以强制ScrollPaneUI实现使用JScrollBar子类。 ScrollPaneUI实现用于创建垂直滚动条。
        结果
        a JScrollBar具有垂直方向
        另请参见:
        JScrollBar
      • setVerticalScrollBar

        @BeanProperty(expert=true,
                      description="The vertical scrollbar.")
        public void setVerticalScrollBar​(JScrollBar verticalScrollBar)
        将控制视口垂直视图位置的滚动条添加到滚动窗格。 这通常是不必要的,因为默认情况下JScrollPane会创建垂直和水平滚动条。
        参数
        verticalScrollBar - 要添加的新垂直滚动条
        另请参见:
        createVerticalScrollBar()getVerticalScrollBar()
      • createViewport

        protected JViewport createViewport()
        默认情况下返回新的JViewport 用于创建视口(需要)在setViewportViewsetRowHeaderViewsetColumnHeaderView 子类可以重写此方法以返回子类JViewport
        结果
        一个新的 JViewport
      • setViewport

        @BeanProperty(expert=true,
                      visualUpdate=true,
                      description="The viewport child for this scrollpane")
        public void setViewport​(JViewport viewport)
        删除旧视口(如果有); 强制新视口的viewPosition位于+ x,+ y象限; 使用新视口同步行和列标题(如果有的话); 最后将滚动条和标题与新视口同步。

        大多数应用程序会发现使用setViewportView将视口和视图添加到滚动窗格更方便。

        参数
        viewport - 要使用的新视口; 如果视口为null ,则仍会删除旧视口,并且新视口设置为null
        另请参见:
        createViewport()getViewport()setViewportView(java.awt.Component)
      • setViewportView

        public void setViewportView​(Component view)
        必要时创建视口,然后设置其视图。 不直接向JScrollPane构造函数提供视图的应用程序应使用此方法指定将在滚动窗格中显示的可滚动子项。 例如:
          JScrollPane scrollpane = new JScrollPane();
         scrollpane.setViewportView(myBigComponentToScroll); 
        应用程序不应将子项直接添加到滚动窗格。
        参数
        view - 要添加到视口的组件
        另请参见:
        setViewport(javax.swing.JViewport)JViewport.setView(java.awt.Component)
      • setRowHeader

        @BeanProperty(expert=true,
                      description="The row header child for this scrollpane")
        public void setRowHeader​(JViewport rowHeader)
        删除旧的rowHeader(如果存在); 如果新的rowHeader不是null ,则将其viewPosition的y坐标与视口(如果有)同步,然后将其添加到滚动窗格。

        大多数应用程序会发现使用setRowHeaderView将行标题组件及其视口添加到滚动窗格更方便。

        参数
        rowHeader - 要使用的新行标题; 如果null旧的行标题仍被删除,新的rowHeader设置为null
        另请参见:
        getRowHeader()setRowHeaderView(java.awt.Component)
      • setRowHeaderView

        public void setRowHeaderView​(Component view)
        如有必要,创建行标题视口,设置其视图,然后将行标题视口添加到滚动窗格。 例如:
          JScrollPane scrollpane = new JScrollPane();
         scrollpane.setViewportView(myBigComponentToScroll);
         scrollpane.setRowHeaderView(myBigComponentsRowHeader); 
        参数
        view - 要显示为行标题的组件
        另请参见:
        setRowHeader(javax.swing.JViewport)JViewport.setView(java.awt.Component)
      • setColumnHeader

        @BeanProperty(visualUpdate=true,
                      description="The column header child for this scrollpane")
        public void setColumnHeader​(JViewport columnHeader)
        删除旧的columnHeader(如果存在); 如果新的columnHeader不是null ,则将其viewPosition的x坐标与视口(如果有)同步,然后将其添加到滚动窗格。

        大多数应用程序会发现使用setColumnHeaderView将列标题组件及其视口添加到滚动窗格更方便。

        参数
        columnHeader - JViewport这是新的列标题
        另请参见:
        getColumnHeader()setColumnHeaderView(java.awt.Component)
      • setColumnHeaderView

        public void setColumnHeaderView​(Component view)
        如有必要,创建列标题视口,设置其视图,然后将列标题视口添加到滚动窗格。 例如:
          JScrollPane scrollpane = new JScrollPane();
         scrollpane.setViewportView(myBigComponentToScroll);
         scrollpane.setColumnHeaderView(myBigComponentsColumnHeader); 
        参数
        view - 要显示为列标题的组件
        另请参见:
        setColumnHeader(javax.swing.JViewport)JViewport.setView(java.awt.Component)
      • getCorner

        public Component getCorner​(String key)
        返回指定角落的组件。 指定角的key值是以下之一:
        • ScrollPaneConstants.LOWER_LEFT_CORNER
        • ScrollPaneConstants.LOWER_RIGHT_CORNER
        • ScrollPaneConstants.UPPER_LEFT_CORNER
        • ScrollPaneConstants.UPPER_RIGHT_CORNER
        • ScrollPaneConstants.LOWER_LEADING_CORNER
        • ScrollPaneConstants.LOWER_TRAILING_CORNER
        • ScrollPaneConstants.UPPER_LEADING_CORNER
        • ScrollPaneConstants.UPPER_TRAILING_CORNER
        参数
        key - 上面显示的值之一
        结果
        由给定密钥标识的角落组件(可能是 null ),如果密钥无效, null
        另请参见:
        setCorner(java.lang.String, java.awt.Component)
      • setCorner

        public void setCorner​(String key,
                              Component corner)
        如果有空间,添加将出现在其中一个滚动窗格角落中的子项。 例如,当两个滚动条显示(在滚动窗格的右边缘和底边缘上)时,左下角部分将显示在两个滚动条的两端之间的空间中。 关键的法律价值是:
        • ScrollPaneConstants.LOWER_LEFT_CORNER
        • ScrollPaneConstants.LOWER_RIGHT_CORNER
        • ScrollPaneConstants.UPPER_LEFT_CORNER
        • ScrollPaneConstants.UPPER_RIGHT_CORNER
        • ScrollPaneConstants.LOWER_LEADING_CORNER
        • ScrollPaneConstants.LOWER_TRAILING_CORNER
        • ScrollPaneConstants.UPPER_LEADING_CORNER
        • ScrollPaneConstants.UPPER_TRAILING_CORNER

        虽然“corner”与任何beans属性签名都不匹配, PropertyChange会生成PropertyChange事件,并将属性名称设置为角键。

        参数
        key - 标识组件将出现在哪个角落
        corner - 以下组件之一:
        • lowerLeft
        • 右下
        • 左上
        • 右上方
        异常
        IllegalArgumentException - 如果角键无效
      • setComponentOrientation

        public void setComponentOrientation​(ComponentOrientation co)
        设置由 ComponentOrientation参数确定的垂直和水平滚动条的方向。
        重写:
        setComponentOrientation在类 Component
        参数
        co - 以下值之一:
        • java.awt.ComponentOrientation.LEFT_TO_RIGHT
        • java.awt.ComponentOrientation.RIGHT_TO_LEFT
        • java.awt.ComponentOrientation.UNKNOWN
        另请参见:
        ComponentOrientation
      • isWheelScrollingEnabled

        @BeanProperty(description="Flag for enabling/disabling mouse wheel scrolling")
        public boolean isWheelScrollingEnabled()
        指示是否响应鼠标滚轮进行滚动。 轮盘滚动默认启用。
        结果
        如果启用了鼠标滚轮滚动,则为true,否则为false
        从以下版本开始:
        1.4
        另请参见:
        setWheelScrollingEnabled(boolean)
      • setWheelScrollingEnabled

        @BeanProperty(description="Flag for enabling/disabling mouse wheel scrolling")
        public void setWheelScrollingEnabled​(boolean handleWheel)
        启用/禁用滚动以响应鼠标滚轮的移动。 轮盘滚动默认启用。
        参数
        handleWheel - true如果要为MouseWheelEvent自动完成滚动,否则为 false
        从以下版本开始:
        1.4
        另请参见:
        isWheelScrollingEnabled()MouseWheelEventMouseWheelListener
      • paramString

        protected String paramString()
        返回此JScrollPane的字符串表示JScrollPane 此方法仅用于调试目的,返回字符串的内容和格式可能因实现而异。 返回的字符串可能为空,但可能不是null
        重写:
        paramString在类 JComponent
        结果
        JScrollPane的字符串表示 JScrollPane
      • getAccessibleContext

        @BeanProperty(bound=false)
        public AccessibleContext getAccessibleContext()
        获取与此JScrollPane关联的AccessibleContext。 对于滚动窗格,AccessibleContext采用AccessibleJScrollPane的形式。 如有必要,将创建一个新的AccessibleJScrollPane实例。
        Specified by:
        getAccessibleContext在界面 Accessible
        重写:
        getAccessibleContext在类 Component
        结果
        an AccessibleJScrollPane that serves as the AccessibleContext of this JScrollPane