【发布时间】:2012-03-31 01:40:57
【问题描述】:
我有一个 JScrollPane 组件:
scroller = new JScrollPane();
scroller.getViewport().add(bigPanel);
scroller.getViewport().setDoubleBuffered(true);
bigPanel 被绘制成一个缓冲图像,该图像在启动时显示,一切看起来都正常。我可以上下滚动没有任何问题。但是,当我放大 bigPanel 时,它会更新 bufferedImage,但只保存 JScrollPane 中可见的部分(尺寸正确,只是屏幕外的内容为空白)。
我尝试在滚动条更改时更新缓冲图像,这非常昂贵,并且导致图像在两者之间呈现白色条纹......
scroller.getVerticalScrollBar().addAdjustmentListener(this);
那么,有没有一种方法可以像一开始那样绘制组件,还是自己编写滚动条更好?
我将尝试编写最少的工作代码,但隔离它有点困难。面板由填充的矩形组成。
【问题讨论】:
-
您的 bigPanel 是否在背景中设置了图像?如果是,请尝试仅在 paintComponent 方法中调整图像大小..
-
如何(如在 SCCE 中)将 bigPanel 绘制到缓冲图像上?看起来您正在将滚动窗格绘制到图像而不是实际的 bigPanel。您还想在绘制图像时关闭 bigPanel 上的双缓冲。
标签: java swing jscrollpane bufferedimage