Java 在JPanel上绘制线条,而不重新绘制

Java 在JPanel上绘制线条,而不重新绘制,java,swing,paintcomponent,Java,Swing,Paintcomponent,我希望在JPanel上画一条垂直线,并使其在上面滑动,而不需要此过程调用JPanel的paintComponent()。我曾想过使用玻璃窗格,但我认为这不是正确的方法,因为在包含JPanel的框架中还有其他组件,因此它不是特定于它的(而且我不确定它是否会调用paintComponent()) 有什么想法吗 即使使用玻璃材质窗格玻璃,底层组件也必须在某个时候重新喷漆。没有一种好方法可以避免调用JPanel 但是,JPanel不应该在paintComponent中进行绘画以外的工作。如果您试图避免调

我希望在
JPanel
上画一条垂直线,并使其在上面滑动,而不需要此过程调用
JPanel
paintComponent()
。我曾想过使用
玻璃窗格
,但我认为这不是正确的方法,因为在包含
JPanel
的框架中还有其他组件,因此它不是特定于它的(而且我不确定它是否会调用
paintComponent()


有什么想法吗

即使使用玻璃材质窗格玻璃,底层组件也必须在某个时候重新喷漆。没有一种好方法可以避免调用JPanel

但是,JPanel不应该在
paintComponent
中进行绘画以外的工作。如果您试图避免调用它,那么听起来您在
paintComponent
方法中有一些东西需要以某种方式更改或缓存。

如果您只是想将线条绘制代码与其他绘制代码隔离开来,那么您应该使用它


如果绘制代码很昂贵,那么可能应该创建一个BuffereImage,然后在paintComponent()代码中重新绘制图像。这比每次从头开始重新绘制要快。

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

是的,你说得对,我在
paintComponent
方法中做了太多的工作。在进行缓存之前,我想知道是否有任何技术可行……唯一可行的技术是缓存JPanel的像素并用另一个窗格重新绘制它们。这将是棘手和有问题的,特别是当帧大小可能改变时。我强烈建议将与绘画无关的动作移出paintComponent方法。我知道这个问题很老,但如果可以的话,我想请教你。如果我将动画gif添加到ImageIcon,将其添加到JLabel并将JLabel添加到JPanel,gif帧的循环将触发JPanel的paintComponent方法。这真的有必要吗?gif与图标/标签隔离。我能不能阻止连锁店的电话?