1

我知道 JPanel 默认情况下是自动双缓冲的。但是,我的面板中有一个特别耗时的绘制操作,但是只有在底层数据发生变化时才需要重新绘制面板,这种情况很少见。因此,我想重用 JPanel 缓冲区,而不是在每次调用repaint().

我已经在我的 JPanel 子类上手动实现了一个“脏”标志,但是我不知道如何在绘制操作开始后取消它。首先,我无法避免重新绘制的调用,因为我的面板位于 JScrollPane 内,每次调整大小时都会重新绘制它(这确实经常发生),这会导致我的自定义面板被重新绘制。

有没有办法在不手动缓冲面板的情况下做到这一点?如果没有,结合 JPanel 实现手动缓冲区的推荐方法是什么?

4

1 回答 1

4

我有一个特别耗时的绘制操作..只需要在底层数据发生变化时重新绘制,这很少见..

将数据绘制到 aBufferedImage中,将其显示在 a 中JLabel。有变化就打电话label.repaint()。EG 如this answer所示。

在标签中显示图像是一种获得具有首选大小的 GUI 的方法,不需要扩展任何东西。要获得显示它的框架或对话框的完美尺寸,请调用pack().

于 2013-05-10T06:29:45.427 回答