Анимация - Java (240993)

Узнай цену своей работы

Формулировка задачи:

Цель: перемещение круга из одного угла окна в другой. Анимация начинается на нажатию кнопки Взяла пример, упростила, получилось:
/**
 * Created by sasha on 13.01.2017.
 */
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
 
public class MovingCircle extends JComponent implements ActionListener {
    private Timer timer;
    public int x =10;
    public int y =10;
 
    public MovingCircle(int delay) {
        timer = new Timer(delay, this);
        setPreferredSize(new Dimension(500, 500));
    }
 
    public void start() {
        timer.start();
    }
 
    public void stop() {
        timer.stop();
    }
 
    @Override
    public void actionPerformed(ActionEvent a) {
        repaint();
    }
 
    @Override
    protected void paintComponent(Graphics g) {
        g.setColor(Color.white);
        g.fillRect(0,0,this.getWidth(),this.getHeight());
 
        g.setColor(Color.green);
        g.fillOval(x,y,40,40);
        x++;
        y++;
 
    }
 
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new JFrame("Moving Circle");
                JPanel panel = new JPanel();
 
                final MovingCircle MovingCircleGreen = new MovingCircle(20);
 
                panel.add(MovingCircleGreen);
                frame.getContentPane().add(panel);
 
                final JButton button = new JButton("Start");
 
                button.addActionListener(new ActionListener() {
                    private boolean pulsing = false;
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        if (pulsing) {
                            pulsing = false;
                            MovingCircleGreen.stop();
                            button.setText("Start");
                        } else {
                            pulsing = true;
                            MovingCircleGreen.start();
                            button.setText("Stop");
                        }
                    }
                });
                panel.add(button);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setSize(600, 550);
                frame.setVisible(true);
            }
        });
    }
}
Правильно ли я понимаю, что на кнопку навешивается слушатель - анонимный класс, в котором запускается или останавливается таймер и меняется название кнопки при нажатии.Таймер регистрирует в качестве слушателя экземпляр класса MovingCircle. В свою очередь класс MovingCircle реализует метод actionPerformed интерфейса ActionListener. Когда таймер запускается он отправляет события своим слушателям (поэтому вызывается метод actionPerformed класса MovingCircle), до тех пор пока не будет остановлен. Starts the <code>Timer</code>, * causing it to start sending action events * to its listeners. И наконец вопрос: че за событие формирует таймер? А если бы я реализовывала несколько интерфейсов для обработки событий?

Решение задачи: «Анимация»

textual
Листинг программы
 public String getActionCommand() {
        return actionCommand;
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5