Module  java.desktop
软件包  javax.swing

Class JViewport

  • All Implemented Interfaces:
    ImageObserverMenuContainerSerializableAccessible


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

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

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

    1. 视图和父视图,并检查它们是否是JComponents ,如果不是,停止并重新绘制整个视口。
    2. 如果视口被祖先隐藏,则停止并重新绘制整个视口。
    3. 计算将变得可见的区域,如果它与视口一样大,停止并重新绘制整个视图区域。
    4. 获取祖先Window的图形,并在滚动区域上做一个copyArea
    5. 提醒观点重绘新近可见的地区。
    6. 下一次在视口上调用paint时,如果剪辑区域小于视口大小,则定时器被启动以重绘整个区域。
    一般来说,这种方法要快得多。 与后备存储方法相比,这避免了维护屏幕外缓冲区的开销,并且不得不做两个copyArea 与非后备店相比,这种方法将大大减少涂漆区域。

    当视口被另一个窗口或部分屏幕遮挡时,这种方法可能导致比后备存储方法更慢的时间。 当另一个窗口遮蔽视口时,copyArea将复制垃圾,系统将生成一个绘画事件,以通知我们我们需要绘制新曝光的区域。 处理这种情况的唯一方法是重绘整个视口,这可能会导致比后备存储盒慢的性能。 在大多数应用程序中,当视口被另一个窗口或屏幕遮挡时,用户很少会滚动,所以这种优化通常在被遮蔽时是值得的。

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

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

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

      • isViewSizeSet

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

        protected Point lastPaintPosition
        最后一个 viewPosition我们画了,所以我们知道多少后备店的图像是有效的。
      • backingStore

        @Deprecated
        protected boolean backingStore
        已过时。 从Java 2平台v1.3开始
        当此视口保持其内容的屏幕外图像时,该值为True,以便可以使用快速“位”功能进行某些滚动,而不是通过访问视图对象来构建显示。 默认值为false
        另请参见:
        setScrollMode(int)
      • backingStoreImage

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

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

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

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

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

      • JViewport

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

      • getUI

        public ViewportUI getUI​()
        返回渲染此组件的L&F对象。
        重写:
        getUIJComponent
        结果
        一个 ViewportUI对象
        从以下版本开始:
        1.3
      • addImpl

        protected void addImpl​(Component child,
                               Object constraints,
                               int index)
        设置JViewport的一个轻量级的小孩,可以是null (由于只有一个孩子占据整个视口,所以constraintsindex参数将被忽略。)
        重写:
        addImplContainer
        参数
        child - 视口的轻型 child
        constraints - 要被尊重的 constraints
        index - 索引
        另请参见:
        setView(java.awt.Component)
      • scrollRectToVisible

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

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

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

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

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

        注意:如果border不是null ,则此方法将抛出异常,因为JViewPort不支持JViewPort

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

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

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

        protected boolean isPaintingOrigin​()
        如果滚动模式是一个BACKINGSTORE_SCROLL_MODE ,使绘画始于JViewport或其祖先之一,则返回true。 否则返回false
        重写:
        isPaintingOriginJComponent
        结果
        如果滚动模式是 BACKINGSTORE_SCROLL_MODE
        另请参见:
        JComponent.isPaintingOrigin()
      • reshape

        public void reshape​(int x,
                            int y,
                            int w,
                            int h)
        设置此视口的边界。 如果视口的宽度或高度已更改,请触发StateChanged事件。
        重写:
        reshapeJComponent
        参数
        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​()
        已过时。 从Java 2平台v1.3开始,由getScrollMode()代替。
        如果此视口保持其内容的屏幕外图像,则返回 true
        结果
        true如果 scrollModeBACKINGSTORE_SCROLL_MODE
      • setBackingStoreEnabled

        @Deprecated
        public void setBackingStoreEnabled​(boolean enabled)
        已过时。 从Java 2平台v1.3开始,由setScrollMode()代替。
        如果此视口将保持其内容的屏幕外图像,则为true。 该图像用于降低对viewPosition的小一维更改的viewPosition 而不是重绘整个视口,我们使用Graphics.copyArea来影响一些滚动。
        参数
        enabled - 如果是真的,请维护一个非屏幕后备店
      • 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 这是视图中可见部分,视图坐标。
        结果
        一个 Rectangle使用视图坐标给出视图的可见部分。
      • computeBlit

        protected boolean computeBlit​(int dx,
                                      int dy,
                                      Point blitFrom,
                                      Point blitTo,
                                      Dimension blitSize,
                                      Rectangle blitPaint)
        计算背景存储图像当前包含oldLoc在左上角的blit的参数,然后滚动到newLoc 修改参数以返回blit所需的值。
        参数
        dx - 水平三角洲
        dy - 垂直三角形
        blitFrom - Point我们是 Point
        blitTo - Point我们很 Point
        blitSize - 该地区的 Dimension blit
        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​()
        为视图创建一个侦听器。
        结果
        一个 ViewListener
      • createLayoutManager

        protected LayoutManager createLayoutManager​()
        子类可以覆盖此构造器中的不同布局管理器(或null )。 返回LayoutManager安装在JViewport
        结果
        一个 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执行。
        重写:
        repaintJComponent
        参数
        tm - 更新前的最大时间(以毫秒为单位)
        x - x坐标(左上角的像素)
        y - y坐标( y像素)
        w - 宽度
        h - 高度
        另请参见:
        Component.update(java.awt.Graphics)
      • paramString

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

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

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