模块  java.desktop
软件包  javax.swing

Class JViewport

  • 实现的所有接口
    ImageObserverMenuContainerSerializableAccessible

    public class JViewport
    extends JComponent
    implements Accessible
    “视口”或“舷窗”,通过它您可以看到基础信息。 滚动时,视口移动的是什么。 这就像窥视相机的取景器。 向上移动取景器会在图片的顶部显示新内容,并丢失底部的内容。

    默认情况下, JViewport是不透明的。 要更改此设置,请使用setOpaque方法。

    注意:我们实现了一种更快的滚动算法,不需要缓冲区来绘制。算法的工作原理如下:

    1. 检查视图和父视图以查看它们是否为JComponents ,如果不是,则停止并重新绘制整个视口。
    2. 如果视口被祖先遮挡,请停止并重新绘制整个视口。
    3. 计算将变为可见的区域,如果它与视口一样大,则停止并重新绘制整个视图区域。
    4. 获取祖先Window的图形并在滚动区域上执行copyArea
    5. 向视图发送消息以重新绘制新可见区域。
    6. 下一次在视口上调用绘制时,如果剪辑区域小于视口大小,则启动计时器以重新绘制整个区域。
    一般来说,这种方法要快得多。 与后备存储方法相比,这避免了维护屏幕外缓冲区和必须执行两个copyArea s的开销。 与非后备商店案例相比,这种方法将大大减少绘制区域。

    当视口被另一个窗口遮挡或部分偏离屏幕时,此方法可能导致比后备存储方法更慢的时间。 当另一个窗口遮挡视口时,copyArea将复制垃圾,系统将生成一个绘制事件,告知我们需要绘制新暴露的区域。 处理此问题的唯一方法是重新绘制整个视口,这会导致性能低于后备存储的情况。 在大多数应用程序中,当视口被另一个窗口或屏幕遮挡时,用户很少会滚动,因此这种优化通常值得在模糊时达到性能。

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

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

    从以下版本开始:
    1.2
    另请参见:
    JScrollPaneSerialized Form
    • 字段详细信息

      • isViewSizeSet

        protected boolean isViewSizeSet
        确定视口尺寸时为True。 默认值为false。
      • lastPaintPosition

        protected Point lastPaintPosition
        我们绘制的最后一个 viewPosition ,因此我们知道有多少后备存储图像有效。
      • backingStore

        @Deprecated
        protected boolean backingStore
        Deprecated.
        As of Java 2 platform v1.3
        当此视口维护其内容的屏幕外图像时为True,以便可以使用快速“bit-blit”操作而不是通过访问视图对象来构建显示来进行一些滚动。 默认值为false
        另请参见:
        setScrollMode(int)
      • backingStoreImage

        protected transient Image backingStoreImage
        用于后备存储的视图图像。
      • scrollUnderway

        protected boolean scrollUnderway
        scrollUnderway标志用于JListJList 当在JList上按下JList键并且所选单元格是列表中的最后一个单元格时, scrollpane自动滚动。 这里,旧的选定单元格需要重新绘制,因此我们需要一个标志,只有在显式调用setViewPosition(Point)时才能使视口执行优化绘制。 当通过其他路由调用setBounds ,标志关闭并且视图正常重新绘制。 另一种方法是从JViewport类中删除它,并让JList使用setBackingStoreEnabled管理此案例。 默认值为false
      • BLIT_SCROLL_MODE

        public static final int BLIT_SCROLL_MODE
        使用graphics.copyArea实现滚动。 这是大多数应用程序中最快的。
        从以下版本开始:
        1.3
        另请参见:
        setScrollMode(int)常数字段值
      • BACKINGSTORE_SCROLL_MODE

        public static final int BACKINGSTORE_SCROLL_MODE
        将视口内容绘制到屏幕外图像中。 这是以前JTable的默认模式。 在某些情况下,此模式可能优于“blit模式”,但它需要大量额外的RAM。
        从以下版本开始:
        1.3
        另请参见:
        setScrollMode(int)常数字段值
      • SIMPLE_SCROLL_MODE

        public static final int SIMPLE_SCROLL_MODE
        此模式使用每次滚动时重绘滚动窗格的整个内容的非常简单的方法。 这是Swing 1.0和Swing 1.1中的默认行为。 在大多数情况下,其他两个选项中的任何一个都将提供更好的性能。
        从以下版本开始:
        1.3
        另请参见:
        setScrollMode(int)常数字段值
    • 构造方法详细信息

      • JViewport

        public JViewport()
        创建一个 JViewport
    • 方法详细信息

      • getUI

        public ViewportUI getUI()
        返回呈现此组件的L&F对象。
        重写:
        getUI在类 JComponent
        结果
        一个 ViewportUI对象
        从以下版本开始:
        1.3
      • addImpl

        protected void addImpl​(Component child,
                               Object constraints,
                               int index)
        设置JViewport的一个轻量级子项,可以是null (由于只有一个子constraints占据整个视口,因此将忽略constraintsindex参数。)
        重写:
        addImpl在类 Container
        参数
        child - 视口的轻量级 child
        constraints - 值得尊重的 constraints
        index - 索引
        另请参见:
        setView(java.awt.Component)
      • scrollRectToVisible

        public void scrollRectToVisible​(Rectangle contentRect)
        滚动视图,使视图中的Rectangle变为可见。

        如果视图当前无效, isValid尝试在滚动之前验证视图 - isValid返回false。 为了避免在创建包含层次结构时进行过多验证,这将不会验证其中一个祖先是否没有对等体,或者没有验证根祖先,或者其中一个祖先不是WindowApplet

        请注意,此方法不会在有效视口外滚动; 例如,如果contentRect大于视口,则滚动将限制在视口的边界内。

        重写:
        scrollRectToVisible在类 JComponent
        参数
        contentRect - 要显示的 Rectangle
        另请参见:
        JComponent.isValidateRoot()Component.isValid()
      • setBorder

        public final void setBorder​(Border border)
        视口通过正常的父/子剪辑“滚动”其子(称为“视图”)(通常视图在滚动的相反方向上移动)。 不支持非null边框或非零插入,以防止此组件的几何变得足够复杂以禁止子类化。 要创建带边框的JViewport ,请将其添加到具有边框的JPanel

        注意:如果border为非null ,则此方法将引发异常,因为JViewPort不支持JViewPort

        重写:
        setBorder在类 JComponent
        参数
        border - 要设置的 Border
        异常
        IllegalArgumentException - 未实现此方法
        另请参见:
        BorderCompoundBorder
      • getInsets

        @BeanProperty(expert=true)
        public final Insets getInsets​(Insets insets)
        返回包含此JViewport的插入值的Insets对象。 传入的Insets对象将重新初始化,并且此对象中的所有现有值都将被覆盖。
        重写:
        getInsetsJComponent
        参数
        insets - 可以重复使用的 Insets对象
        结果
        此视口的插入值
        另请参见:
        getInsets()
      • isOptimizedDrawingEnabled

        public boolean isOptimizedDrawingEnabled()
        JViewport会覆盖此方法的默认实现(在JComponent )以返回false。 这可以确保绘图机器将调用Viewportpaint实现,而不是直接向JViewport的子JViewport发送消息。
        重写:
        isOptimizedDrawingEnabled在类 JComponent
        结果
      • isPaintingOrigin

        protected boolean isPaintingOrigin()
        如果滚动模式为BACKINGSTORE_SCROLL_MODE ,则返回true,以使绘制源自JViewport或其祖先之一。 否则返回false
        重写:
        isPaintingOrigin在类 JComponent
        结果
        如果滚动模式为 BACKINGSTORE_SCROLL_MODE
        另请参见:
        JComponent.isPaintingOrigin()
      • reshape

        public void reshape​(int x,
                            int y,
                            int w,
                            int h)
        设置此视口的边界。 如果视口的宽度或高度已更改,则触发StateChanged事件。
        重写:
        reshape在类 JComponent
        参数
        x - 原点的左边缘
        y - 原点的上边缘
        w - 宽度(以像素为单位)
        h - 高度(以像素为单位)
        另请参见:
        JComponent.reshape(int, int, int, int)
      • setScrollMode

        @BeanProperty(bound=false,
                      enumerationValues={"JViewport.BLIT_SCROLL_MODE","JViewport.BACKINGSTORE_SCROLL_MODE","JViewport.SIMPLE_SCROLL_MODE"},
                      description="Method of moving contents for incremental scrolls.")
        public void setScrollMode​(int mode)
        用于控制滚动视口内容的方法。 您可能希望更改此模式以获得最佳性能。
        参数
        mode - 以下值之一:
        • JViewport.BLIT_SCROLL_MODE
        • JViewport.BACKINGSTORE_SCROLL_MODE
        • JViewport.SIMPLE_SCROLL_MODE
        从以下版本开始:
        1.3
        另请参见:
        BLIT_SCROLL_MODEBACKINGSTORE_SCROLL_MODESIMPLE_SCROLL_MODE
      • getScrollMode

        public int getScrollMode()
        返回当前滚动模式。
        结果
        scrollMode属性
        从以下版本开始:
        1.3
        另请参见:
        setScrollMode(int)
      • isBackingStoreEnabled

        @Deprecated
        public boolean isBackingStoreEnabled()
        Deprecated.
        As of Java 2 platform v1.3, replaced by getScrollMode().
        如果此视口正在维护其内容的屏幕外图像,则返回 true
        结果
        true如果 scrollModeBACKINGSTORE_SCROLL_MODE
      • setBackingStoreEnabled

        @Deprecated
        public void setBackingStoreEnabled​(boolean enabled)
        Deprecated.
        As of Java 2 platform v1.3, replaced by setScrollMode().
        如果此视口将保留其内容的屏幕外图像,则为true。 该图像用于降低viewPosition的小一维变化的viewPosition 我们使用Graphics.copyArea来实现一些滚动,而不是重新绘制整个视口。
        参数
        enabled - 如果为true,则维护一个屏幕外后备存储
      • setView

        public void setView​(Component view)
        设置 JViewport的一个轻量级子项( view ),可以是 null
        参数
        view - 视口的新轻量级子项
        另请参见:
        getView()
      • getViewSize

        public Dimension getViewSize()
        如果未显式设置视图的大小,则返回首选大小,否则返回视图的当前大小。 如果没有视图,则返回0,0。
        结果
        指定视图大小的 Dimension对象
      • setViewSize

        public void setViewSize​(Dimension newSize)
        设置视图的大小。 状态改变事件将被解雇。
        参数
        newSize - 指定视图新大小的 Dimension对象
      • getViewPosition

        public Point getViewPosition()
        返回显示在视口左上角的视图坐标,如果没有视图,则返回0,0。
        结果
        给出左上角坐标的 Point对象
      • setViewPosition

        public void setViewPosition​(Point p)
        设置显示在视口左上角的视图坐标,如果没有视图则不执行任何操作。
        参数
        p - 提供左上角坐标的 Point对象
      • getViewRect

        public Rectangle getViewRect()
        返回一个矩形,其原点为getViewPosition ,大小为getExtentSize 在视图坐标中,这是视图的可见部分。
        结果
        a Rectangle使用视图坐标给出视图的可见部分。
      • computeBlit

        protected boolean computeBlit​(int dx,
                                      int dy,
                                      Point blitFrom,
                                      Point blitTo,
                                      Dimension blitSize,
                                      Rectangle blitPaint)
        计算blit的参数,其中后备存储图像当前包含oldLoc ,我们滚动到newLoc 修改参数以返回blit所需的值。
        参数
        dx - 水平增量
        dy - 垂直增量
        blitFrom - Point我们正在 Point
        blitTo - Point我们正在 Point
        blitSize - 该地区的 Dimension
        blitPaint - blitPaint的地方
        结果
        如果参数被修改并且我们准备好blit,则为true; 否则是假的
      • getExtentSize

        public Dimension getExtentSize()
        返回视图坐标中视图可见部分的大小。
        结果
        一个 Dimension对象给出了视图的大小
      • toViewCoordinates

        public Dimension toViewCoordinates​(Dimension size)
        将像素坐标中的大小转换为视图坐标。 支持“逻辑坐标”的视口子类将覆盖此方法。
        参数
        size - 使用像素坐标的 Dimension对象
        结果
        一个 Dimension对象转换为视图坐标
      • toViewCoordinates

        public Point toViewCoordinates​(Point p)
        将像素坐标中的点转换为视图坐标。 支持“逻辑坐标”的视口子类将覆盖此方法。
        参数
        p - 使用像素坐标的 Point对象
        结果
        转换为视图坐标的 Point对象
      • setExtentSize

        public void setExtentSize​(Dimension newExtent)
        使用视图坐标设置视图的可见部分的大小。
        参数
        newExtent - 指定视图大小的 Dimension对象
      • createViewListener

        protected JViewport.ViewListener createViewListener()
        为视图创建一个侦听器。
        结果
        a ViewListener
      • createLayoutManager

        protected LayoutManager createLayoutManager()
        子类可以覆盖它以在构造函数中安装不同的布局管理器(或null )。 返回LayoutManager在其上安装JViewport
        结果
        a LayoutManager
      • getChangeListeners

        public ChangeListener[] getChangeListeners()
        返回使用addChangeListener()添加到此JViewport的所有 ChangeListener的数组。
        结果
        如果没有添加任何侦听器,则添加所有 ChangeListener或空数组
        从以下版本开始:
        1.4
      • repaint

        public void repaint​(long tm,
                            int x,
                            int y,
                            int w,
                            int h)
        始终在父坐标系中重新绘制,以确保 RepaintManager仅执行一次绘制。
        重写:
        repaint在类 JComponent
        参数
        tm - 更新前的最长时间(以毫秒为单位)
        x - x坐标(左起像素数)
        y - y坐标(从顶部向下的像素)
        w - 宽度
        h - 高度
        另请参见:
        Component.update(java.awt.Graphics)
      • paramString

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

        protected void firePropertyChange​(String propertyName,
                                          Object oldValue,
                                          Object newValue)
        通知听众属性更改。 这是子类以更新windowBlit属性。 putClientProperty属性是最终的)。
        重写:
        firePropertyChange在类 Component
        参数
        propertyName - 包含属性名称的字符串
        oldValue - 属性的旧值
        newValue - 该属性的新值
      • getAccessibleContext

        public AccessibleContext getAccessibleContext()
        获取与此JViewport关联的AccessibleContext。 对于视口,AccessibleContext采用AccessibleJViewport的形式。 如有必要,将创建一个新的AccessibleJViewport实例。
        Specified by:
        getAccessibleContext在接口 Accessible
        重写:
        getAccessibleContext在类 Component
        结果
        一个AccessibleJViewport,用作此JViewport的AccessibleContext