ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [转载]JViewport 在JDK 1.3.0 中的行为

[转载]JViewport 在JDK 1.3.0 中的行为

原创 Linux操作系统 作者:dinner1007 时间:2019-05-13 21:48:04 0 删除 编辑

JViewport 在JDK 1.3.0 中的行为


您也许已经注意到了,在使用 JDK 版本 1.3.0 的时候,Swing 应用程序中的滚动和缩放操作有时看起来有些抖动,或者在显示最终图像之前,临时图像看起来似乎在闪烁。使用版本 1.2.2 可以使相同的应用程序实现平滑的滚动。本文的技巧解释了为什么会这样。

您也许已经注意到了,在使用 JDK 版本 1.3.0 的时候,Swing 应用程序中的滚动和缩放操作有时看起来有些抖动,或者在显示最终图像之前,临时图像看起来似乎在闪烁。使用版本 1.2.2 可以使相同的应用程序实现平滑的滚动。本文的技巧解释了为什么会这样。

Swing JViewport 类定义了在任一时刻图像的可见部分。(请想象通过一个开口观察图像;而滚动改变了观察开口。) JScrollPane 类将滚动条连接至视口。当滚动图像时,视口的可见范围发生了变化。在屏幕上显示新图像的方式取决于所采用的滚动模式。由于从 1.2.2 到 1.3.0 已经改变了缺省的滚动方式,所以如果不显式设置滚动模式,那么同一个应用程序在两种版本上可能有不同的行为。使用 setScrollMode 设置模式,如下所示:

setScrollMode(JViewport.SIMPLE_SCROLL_MODE)

setScrollMode() 可以使用以下三个值,它们是:

  • SIMPLE_SCROLL_MODE :每次滚动都重绘整个滚动屏。这是 1.2.2 中的缺省设置。
  • BACKINGSTORE_SCROLL_MODE :在画图像之前,先将图像缓冲到一个后备存储器里。它提供的性能要优于 SIMPLE_SCROLL_MODE ,但是需要额外的内存。在 1.3 中仍支持这一参数,但已不赞成使用它。
  • BLIT_SCROLL_MODE :这一算法在 1.2.2 中引入,用来提高滚动性能。通过位块传输,绘图操作立即在屏幕上发生,而不是在可以显示完整的图像之前把绘图操作缓冲到一个屏外的图像。因为位块传输不必 维护一个屏外缓冲区,所以在大多数情况下,它都将提高性能。当滚动一个隐藏在其它窗口后面的图像时,或者当部分图像在屏幕区域以外时,情况可能会不同于 此。在这种情况下,将产生一个重新绘图的操作,并且性能将受到负面影响。

在 1.2.2 中只有显式设置时才使用位块传输,但是由于已经证明它能显著提高性能,所以在 1.3.0 中位块传输成了缺省的滚动模式。使用位块传输模式的效果之一是,在滚动或缩放时在屏幕上可以看到一些绘图操作的中间过程。对于复杂的图像这一点通常更加明显。如果不能接受这一点,您可以设置成另外一种模式,但是性能方面几乎肯定会受到影响。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/374079/viewspace-130247/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-08-23

  • 博文量
    1714
  • 访问量
    1477638