Module  java.desktop
软件包  javax.swing

Class JScrollPane

  • All Implemented Interfaces:
    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管理视口,可选的垂直和水平滚动条以及可选的行和列标题视口。 您可以在JScrollPane查找JScrollPane的任务导向文档, 这是Java Tutorial中的一节。 请注意, JScrollPane不支持重量级组件。 Example

    The following text describes this image.

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

    除了滚动条和视口之外,一个JScrollPane可以有一个列标题和行标题。 这些都是setRowHeaderViewsetColumnHeaderView指定的JViewport对象。 列标题视口自动向左和向右滚动,跟踪主视口的左右滚动。 (它从不垂直滚动。)行标题的行为类似。

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

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

    如果该角落中存在空的空间,则该角色组件将仅可见。例如,将组件集合放置在带有列标题的滚动窗格的右上角。 如果滚动窗格的垂直滚动条不存在,也许是因为视图组件没有变得足够大以至于不需要它,那么角色组件将不会被显示(因为标题会议创建的角落中没有空格和垂直滚动条)。 使用setVerticalScrollBarPolicy(VERTICAL_SCROLLBAR_ALWAYS)强制滚动条始终显示,将确保角部组件的空间始终存在。

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

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

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

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

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

    警告:此类的序列化对象与将来的Swing版本不兼容。 当前的序列化支持适用于运行相同版本的Swing的应用程序之间的短期存储或RMI。 从1.4版本开始,所有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 - 要在滚动窗口视口中显示的组件
        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)的 ScrollPaneUI对象。
        参数
        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实现用于创建水平滚动条。
        结果
        一个水平方向的 JScrollBar
        另请参见:
        JScrollBar
      • setHorizontalScrollBar

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

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

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

        protected JViewport createViewport​()
        默认情况下返回新的JViewport 用于创建视口(需要)在setViewportViewsetRowHeaderView ,并setColumnHeaderView 子类可以覆盖此方法以返回JViewport的子类。
        结果
        一个新的 JViewport
      • setViewport

        @BeanProperty(expert=true,
                      visualUpdate=true,
                      description="The viewport child for this scrollpane")
        public void setViewport​(JViewport viewport)
        删除旧的视口(如果有的话); 迫使新视口的观点位于+ 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不是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

        虽然“角”与任何bean属性签名不匹配, PropertyChange生成PropertyChange事件,属性名称设置为角键。

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

        public void setComponentOrientation​(ComponentOrientation co)
        设置由 ComponentOrientation参数确定的垂直和水平滚动条的方向。
        重写:
        setComponentOrientationComponent
        参数
        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
        重写:
        paramStringJComponent
        结果
        这个 JScrollPane的字符串表示 JScrollPane
      • getAccessibleContext

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