防止Java在更新时重新绘制JPanel的内容

防止Java在更新时重新绘制JPanel的内容,java,swing,jpanel,flicker,jcomponent,Java,Swing,Jpanel,Flicker,Jcomponent,我有一个JPanel,它包含很多子组件。当更新\向父JPanel添加新组件时,我想阻止它重新绘制,这是如何实现的?您可以尝试使用setIgnoreRepaitBoolean值,但这是一个典型的swing功能,可以工作,也不能工作,主要是因为它依赖于AWT,所以您永远不知道 否则,您可以通过使用一个标志来覆盖paint方法,该标志只会使methor返回,而不调用super.paint。实际上,覆盖paintComponent应该是正确的选择您可以尝试使用setIgnoreRepaitBoolean

我有一个JPanel,它包含很多子组件。当更新\向父JPanel添加新组件时,我想阻止它重新绘制,这是如何实现的?

您可以尝试使用setIgnoreRepaitBoolean值,但这是一个典型的swing功能,可以工作,也不能工作,主要是因为它依赖于AWT,所以您永远不知道

否则,您可以通过使用一个标志来覆盖paint方法,该标志只会使methor返回,而不调用super.paint。实际上,覆盖paintComponent应该是正确的选择

您可以尝试使用setIgnoreRepaitBoolean值,但这是一个典型的swing功能,可以工作,也不能工作,主要是因为它依赖于AWT,所以您永远不知道

否则,您可以通过使用一个标志来覆盖paint方法,该标志只会使methor返回,而不调用super.paint。实际上,覆盖paintComponent应该是正确的选择

试试看。这将阻止组件重新喷漆。每次添加新组件后,您可能需要执行此操作。

请尝试。这将阻止组件重新喷漆。您可能需要在每次添加新组件后执行此操作

setVisible(false)  
更新

setVisible(true)
更新

setVisible(true)

我从未注意到明显的延迟。你能提供一个sscce来证明这个问题吗?我同意垃圾神,我从来没有见过这个问题。组件在添加到配电盘时不会绘制,因为默认情况下,它们的大小为0,因此无需绘制任何内容。只有在调用panel.revalidate后,才会绘制组件,因为这会调用布局管理器,而布局管理器会依次布置组件并为其提供大小。如果你正在做一些奇怪的事情,那么我们需要一个SSCCE来了解你在做什么。我从来没有注意到明显的延迟。你能提供一个sscce来证明这个问题吗?我同意垃圾神,我从来没有见过这个问题。组件在添加到配电盘时不会绘制,因为默认情况下,它们的大小为0,因此无需绘制任何内容。只有在调用panel.revalidate后,才会绘制组件,因为这会调用布局管理器,而布局管理器会依次布置组件并为其提供大小。如果您正在做一些奇怪的事情,那么我们需要一个SSCCE来了解您在做什么。SetIgnoreRepaitBoolean值用于完全不同的东西。Java文档说:设置是否应忽略从操作系统接收的绘制消息。这不会影响AWT在软件中生成的绘制事件,除非它们是对操作系统级绘制消息的即时响应。例如,如果在全屏模式下运行并且需要更好的性能,或者如果将翻页用作缓冲策略,则此选项非常有用。SetIgnoreRepaitBoolean值用于完全不同的对象。Java文档说:设置是否应忽略从操作系统接收的绘制消息。这不会影响AWT在软件中生成的绘制事件,除非它们是对操作系统级绘制消息的即时响应。例如,如果在全屏模式下运行并且需要更好的性能,或者如果页面翻转被用作缓冲策略,那么这非常有用。