Разработка анимации JApplet с использованием Swing и Threads - PullRequest
1 голос
/ 14 марта 2011

Я пытаюсь реализовать небольшой апплет, который выполняет анимацию.Я хотел бы сделать анимацию в JPanel и ниже JPanel Animation, иметь кнопки воспроизведения / паузы и пропуска для управления анимацией.Чтобы сделать это правильно, я думаю, что мне нужна анимация в потоке.(правильно?)

Мои вопросы: Что такое хороший способ организовать мои классы для этого приложения?Как заставить мой поток анимации запускаться внутри JPanel?

Я искал учебники на oracle.com, и это то, что у меня есть до сих пор ...

Class AnimationApplet extends JApplet {

...

    public void init(){
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    createGUI();
                }
            });
            } catch (InterruptedException ex) {
                Logger.getLogger(TabApplet.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InvocationTargetException ex) {
                Logger.getLogger(TabApplet.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

     private void createGUI() {
        AnimationPanel ac = new AnimationPanel();
        this.setConentPane(ac);
     }

} // Class AnimationApplet

class AnimationPanel extends JPanel implements ActionListener {
    ...
}

Редактировать: я не знаю, поможет ли это, но именно это я и пытаюсь сделать.Я создаю гитарный табулятор, чтобы он продолжал перемещать ноты по экрану, а затем в определенных точках (16-е ноты) проверить, есть ли ноты для анимации.Это кажется довольно сложным, потому что вы не можете делить мс на удары в минуту равномерно.Итак, сейчас я подумываю о том, чтобы разделить его на 4 или 5 скоростей (самая медленная, медленная, средняя и т. Д.);

Спасибо,

Nate

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

Нет, вам не нужно использовать потоки напрямую, поскольку вы можете просто использовать Swing Timer для управления анимацией (хотя понимаете, что это использует многопоточность за кулисами). Я хотел бы, чтобы мой компонент анимации расширял JPanel, как вы делаете, и рисовал его методом paintComponent. Я бы избегал, чтобы какой-либо класс gui или «view» расширял класс слушателя, как вы делаете выше, поскольку это заставляет один класс делать слишком много. Я бы либо использовал анонимных внутренних слушателей, либо частных слушателей внутреннего класса, либо если бы сложные отдельные классы автономных слушателей.

Еще одно предостережение: убедитесь, что ваш метод paintComponent выполняет только рисование и рисование, что он не содержит программной логики, и избегайте создания классов или чтения изображений из этого метода. Он должен быть скудным и быстрым.

1 голос
/ 14 марта 2011

Мне нравится javax.swing.Timer для анимации;вот простой пример апплета .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...