java+Swing : efficient overlay of rectangle or other "sprite"

标签 java swing graphics

我不太确定该如何表达,所以请耐心等待。

我在容器 JPanel 中有两个 JPanel 和一个 OverlayLayout。容器中的两个 JPanel 都会覆盖 paint(Graphics) .

底部的 JPanel 是不透明的,绘制了一些相当复杂的图形,因此需要“很长”的时间(10 或 100 毫秒)来呈现。

顶部的 JPanel 是透明的,只是根据鼠标输入绘制一个矩形或直线或简单的形状,所以速度非常快。

有没有一种方法可以设置当我更改上面板中的简单形状时,它不会重绘底部面板?(例如它以某种方式缓存底部面板) p>

我对 bitblt、双缓冲和 XOR 绘图等概念有点熟悉,但不确定在此处应用什么。

最佳答案

最好使用单个 JComponent 并创建一个 BufferedImage 来存储底部图像。当 paintComponent 操作发生在 JComponent 上时,您只需 blit 底部图像并使用 Graphics 对象在其上做任何进一步的绘制(从存储状态)。应该相当有效。

您需要在另一个线程中为底部的 BufferedImage 执行复杂的绘制操作,正如其他张贴者所提到的(不小心忽略了这一点,抱歉 :))。但是,您不想引起对该图像的争用,因此您必须为此存储一个额外的 BufferedImage,并在绘制操作完成的那一刻将它同步到另一个图像.

关于java+Swing : efficient overlay of rectangle or other "sprite",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6144232/

相关文章:

Matlab:如何使用合适的颜色条?

Java:插入排序算法交换

java - 在调查内存泄漏时要寻找哪一代?

java - 如何在某些子句上禁用 JButton?

Java:语句未按顺序执行

c++ - Qt4.8 QGraphicsWidget使用

java - 使用compareTo(String) 按字母顺序排列数组中的字符串?

java - 如何调整 jtextarea 的大小?

java - mac 中的 processWindowEvent

algorithm - 来自点集的边界点