Могу ли я избежать повторной проверки JViewport при каждом вызове setViewPosition()?
Я отлаживал проблему с помощью пользовательского представления прокрутки с использованием подкласса JViewport. Я печатал некоторую информацию из метода layoutContainer() в моем пользовательском LayoutManager и видел, что он вызывается непрерывно, без изменения размера для его запуска. Я посмотрел на источник, и он выглядел так, как будто JViewport.setViewPosition() выполняет повторную проверку при каждом вызове. Я думал, что этого не может быть. Поэтому я вернулся к другому проекту, используя стандартную JScrollPane, и добавил этот код:
myScrollPane.setLayout(new ScrollPaneLayout() {
@Override
public void layoutContainer(Container parent) {
System.out.println("Layout ScrollPane");
super.layoutContainer(parent);
}
});
который доказал, что стандартная версия страдает от этой же проблемы. Есть ли надежный и принятый способ обойти это? Я использую несколько экземпляров своего подкласса JViewport для отображения формы волны и других вещей, прокручиваемых в реальном времени с использованием JViewport.setViewPosition() и размечающих контейнер (каждый раз точно так же) каждые 10 миллисекунд, что является большой неэффективностью. Я могу создать подкласс JViewport и переопределить это, но понимание того, почему было сочтено необходимым провести повторную проверку просто для изменения позиции представления, помогло бы мне избежать возникновения новой проблемы. В настоящее время я озадачен, почему это необходимо.
Таким образом, вытекает следующий вопрос: "почему JViewport.setViewPosition()" вызывает повторную проверку?".