Java 如何处理画布中的多个元素

Java 如何处理画布中的多个元素,java,swing,canvas,Java,Swing,Canvas,我正在用java制作一个UI应用程序,我试图画一些图形来表示窗口中的指南针。我在画布上处理鼠标拖动事件的旋转,但问题是画布中的所有东西都在旋转。我想知道我是否可以分别处理画布中绘制的每个元素,这样只有我的箭头会移动,而不是整个画布 谢谢想必你已经有了一个可以画很多东西的画圈。背景、指南针、指南针箭头。也许还有别的事 当您使用画布绘制时,您会向上下文发出命令,这类似于使用绘画加载画笔 如果你想先画一条红线,然后再画一条蓝线,你可以拿起一些红漆,画一条线,然后清洁你的刷子,拿起一些蓝漆,画那条线 画

我正在用java制作一个UI应用程序,我试图画一些图形来表示窗口中的指南针。我在画布上处理鼠标拖动事件的旋转,但问题是画布中的所有东西都在旋转。我想知道我是否可以分别处理画布中绘制的每个元素,这样只有我的箭头会移动,而不是整个画布


谢谢

想必你已经有了一个可以画很多东西的画圈。背景、指南针、指南针箭头。也许还有别的事

当您使用画布绘制时,您会向上下文发出命令,这类似于使用绘画加载画笔

如果你想先画一条红线,然后再画一条蓝线,你可以拿起一些红漆,画一条线,然后清洁你的刷子,拿起一些蓝漆,画那条线

画布上下文完全相同。这里要做的是在普通画布上下文上绘制一组内容。然后,您需要使用
ctx.save()
保存上下文并进行旋转

当您平移或旋转,甚至只是在上下文上设置填充时,您并没有更改已经完成的操作,您只是说“对于这一点之后的所有操作,应用这些操作。”

然后画指南针箭头/指针

然后调用
ctx.restore()
,继续你的快乐之路。这将阻止在箭头后绘制的对象发生旋转

上下文的save和restore函数跟踪旧状态,这样您就不会使用旋转上下文在指针之后绘制所有内容。这有点像洗画笔,只是更好,因为你可以记得它曾经是蓝色的,而不是每次都要把它洗干净

顺便说一下,如果您确实想将画布上下文完全重置为其默认状态(黑色画笔、默认转换、无阴影等),您只需执行
canvas.width=canvas.width
,它就会完全重置上下文。

另请参见。“在我的画布上”1)如果您指的是
java.awt.canvas
那么a)这个千年,用秋千。b) 标签错误(请先阅读标签的有用说明,然后再将其贴在帖子上)。2) 如果您指的是基于HTML的画布,&标记可能是错误的。3) 如果你是指别的什么,那又怎样?一般来说,这是一个问答网站的技术问题,所以请具体和准确。