过去,我曾使用 PCS 来更新显示某些字段的 Swing 元素,并且一切都按预期工作。然而,我现在面对的是一个相对复杂(换句话说,设计得很糟糕)的用户界面,它显示了很多字段。数据更新成堆出现(一个包含大约 1,000 个字段的新值的网络数据包),我想知道处理此类问题的正确方法是什么。
我主要担心的是,每当有数据包到来时,就会触发 1,000 个 PropertyChangeEvents,从而导致 1,000 个 .repaint()(或 .revalidate() 或其他)。更谨慎的方法似乎是执行“gui.stopRepainting(); fireAllThePropertyEvents(); gui.restartPainting();”之类的操作。有没有办法做到这一点,或者是否有更好的方法来处理这个问题?
最佳答案
重绘请求被传递到 RepaintManager,后者又将多个请求合并为单个重绘。
我觉得很奇怪,你有 1000 个单一表单的字段。假设这确实是真的,那么我怀疑所有 1000 个是否会同时可见。我相信 RepaintManager 只会绘制那些可见的部分,因此开销可能不会像您想象的那么糟糕。
我不知道有什么方法可以停止重新绘制,但也许您可以使 Pane 不可见,进行更新,然后使其再次可见。
或者也许您可以创建一个不执行任何操作的自定义 RepaintManager。您安装它,进行更新,然后重新安装默认管理器。
关于java - 有关通过 PropertyChangeSupport 更新 Swing GUI 的设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4091799/