JScrollPane:重绘屏幕外缓冲图像

时间:2012-03-14 15:10:20

标签: java swing jscrollpane bufferedimage

我有一个JScrollPane组件:

    scroller = new JScrollPane();
    scroller.getViewport().add(bigPanel);
    scroller.getViewport().setDoubleBuffered(true);

bigPanel被绘制成一个bufferedImage,在启动时显示,一切正常。我可以毫无问题地上下滚动。但是,当我放大bigPanel时,它会更新bufferedImage,但只保存JScrollPane中可见的部分(正确的尺寸,只有屏幕外的内容为空白)。

我尝试更新滚动条更改时的缓冲图像,这非常昂贵,导致图像之间呈现白色条纹......

   scroller.getVerticalScrollBar().addAdjustmentListener(this);

那么,有没有办法如何在开始时完成组件的绘制,或者编写自己的卷轴更好?

我会尝试使用最少的工作代码,但是要将它隔离开来有点困难。面板由填充的矩形组成。

1 个答案:

答案 0 :(得分:2)

一种方法是使用BufferedImage缩放旧drawImage(),而getValueIsAdjusting()保持为真。仅在调整停止后修改BufferedImage。如果更新非常耗时,那么增量更新可能是值得的。