在不重绘JPanel的情况下在其上绘制线条

3
我希望能在一个JPanel上画一条竖线,并且使它平滑地滑动,而不会触发该JPanel的paintComponent()方法。我考虑使用GlassPane,但我认为这不是正确的方式,因为有其他包含该JPanel的框架组件,所以它并不特定于该组件(我也不确定它是否会调用paintComponent())。你有什么想法吗?
3个回答

2
即使使用玻璃面板,底层组件也必须在某个时刻重新绘制。没有非常好的方法来避免调用JPanel的paintComponent方法。
然而,JPanel在paintComponent方法中不应该做除绘图之外的事情。如果你试图避免调用它,那么听起来你的paintComponent方法中有些东西需要改变或以某种方式进行缓存。

是的,你说得对,paintComponent方法中确实有太多的内容了。在进行任何缓存之前,我想知道是否有任何可行的技术可以使用... - krookedking
1
唯一可行的技术是缓存JPanel的像素,并在另一个面板上重新绘制它们。这会很棘手和有问题,特别是当框架大小发生变化时。我强烈建议将非绘画相关操作移出paintComponent方法。 - jzd

2
也许你应该使用分层面板,如果你只想将线条绘制代码与其余绘制代码隔离开来。
如果你的绘制代码很耗费资源,那么也许你应该创建一个 BufferedImage,然后在你的 paintComponent() 代码中重新绘制图像。这比每次都从头开始重绘要快。

我知道这个问题已经很老了,但我想请教一下你。如果我将动画gif添加到ImageIcon中,将其添加到JLabel并将JLabel添加到JPanel中,则gif帧的循环会触发JPanel的paintComponent方法。这真的有必要吗?gif仅与图标/标签相关联。我是否可以通过某种方式停止链式调用paint方法? - Nikki

0

你不想在JPanel上调用paintComponent()方法的原因是什么?重新绘制对象以呈现滑过它的线条很可能是最简单的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接