Могу ли я избежать повторной проверки 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()" вызывает повторную проверку?".

0 ответов

Другие вопросы по тегам