Я использую таймер Swing для выполнения анимаций в моей программе. Во многих случаях существует несколько разных вызовов, сделанных для метода animate()
, с отдельным таймером, созданным для каждого. Я знаю, что из-за того, как разработаны таймеры Swing, все они выполняются вместе - все мои анимации происходят одновременно. Однако есть несколько случаев, когда мне нужно дождаться завершения одной анимации, чтобы выполнить другую.Последовательное выполнение таймера качания
Есть ли способ заставить таймеры Swing выполнять последовательно - один за другим, а не все сразу? Или есть альтернативный механизм таймера Swing, который может лучше соответствовать моему варианту использования?
EDIT: Боюсь, я немного упростил свой прецедент. Предложение @ peeskillet будет работать отлично, если бы я знал при каждом «смене сцены», какие анимации нужно будет исполнять, или если одна и та же последовательность анимаций происходит каждый раз. К сожалению, это не тот случай - для каждого перехода требуется другой набор анимаций, с разными наборами компонентов, перемещающимися на панели и вокруг них.
Что я хочу - сначала выполнить анимацию элементов с экрана, а затем (после этого) оживить компоненты на экране. Не сложно различать эти «типы» анимаций во время выполнения - они инициируются из разных методов, и поэтому легко представить их, добавляя их к двум различным «очередям» - очередь исходящих элементов и очередь входящих элементов , Сделав это, я смог бы реализовать основную стратегию вызова
Это сказало - все это имеет смысл только для меня интуитивно, эвристически - я не понял, как реализовать его на практике. Какими были бы эти «очереди», и какой класс будет удерживать, а затем выполнять их? Предположительно, тот, который реализует Runnable, создавая второй поток, который может выполнять анимацию с более жестким контролем над тем, как они работают? Или поток событий-отправки дает мне достаточный контроль здесь, если только я полностью понял, как его использовать? В этом случае - пожалуйста, помогите мне сделать это.
(PS Я понимаю, что я изменил вопрос значительно здесь, по существу, превращая его в новый вопрос, и что @peetskillet ответил, как ранее сформулированный отлично, поэтому я принял этот ответ и отправил новый вопрос here.
Вам просто нужно завершение одного запуска таймера следующего. Нет встроенного механизма. – Gene
@ Gene- Что делать, если таймеры являются динамическими и не могут проверяться вручную. – mmathan