Анимация - Java (240993)
Формулировка задачи:
Цель: перемещение круга из одного угла окна в другой. Анимация начинается на нажатию кнопки
Взяла пример, упростила, получилось:
Правильно ли я понимаю, что на кнопку навешивается слушатель - анонимный класс, в котором запускается или останавливается таймер и меняется название кнопки при нажатии.Таймер регистрирует в качестве слушателя экземпляр класса MovingCircle. В свою очередь класс MovingCircle реализует метод actionPerformed интерфейса ActionListener.
Когда таймер запускается он отправляет события своим слушателям (поэтому вызывается метод actionPerformed класса MovingCircle), до тех пор пока не будет остановлен.
Starts the <code>Timer</code>,
* causing it to start sending action events
* to its listeners.
И наконец вопрос: че за событие формирует таймер? А если бы я реализовывала несколько интерфейсов для обработки событий?
/** * 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); } }); } }
Решение задачи: «Анимация»
textual
Листинг программы
public String getActionCommand() { return actionCommand; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д