作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道默认情况下 JPanel 是自动双缓冲的。但是,我的面板有一个特别耗时的绘制操作,但是只有底层数据发生变化才需要重新绘制面板,这种情况很少见。因此,我想重用 JPanel 缓冲区,而不是在每次调用 repaint()
后清除它。
我已经在我的 JPanel 子类上手动实现了一个“脏”标志,但我不知道如何在启动后取消绘制操作。我一开始就无法避免调用重绘,因为我的面板位于 JScrollPane 内,每次调整大小时都会重绘(确实经常发生),这导致我的自定义面板重新粉刷。
有没有办法在不手动缓冲面板的情况下做到这一点?如果不是,那么结合 JPanel 实现手动缓冲区的推荐方法是什么?
最佳答案
I have a particularly time-intensive painting operation .. only needs to be repainted when the underlying data changes, which is rare..
将数据绘制到 BufferedImage
, 显示在 JLabel
中.调用label.repaint()
如果它改变了。例如。如 this answer 中所示.
Bonus 在标签中显示图像是获得具有首选大小的 GUI 的一种方式,不需要扩展任何内容。要获得显示它的框架或对话框的完美尺寸,请调用 pack()
。
关于java - 如何取消 JPanel 的重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16475868/
我是一名优秀的程序员,十分优秀!