Анимация в GUI - Java
Формулировка задачи:
Добрый день!
Подскажите пожалуйста, где ошибка и как подправить программу.(идея взята из книги HEAD First).
Первоначально - программа рисует круг где-то во фрейме и начинает двигать в заданном направлении по х, у. Пока идет цикл - работает, круг постепенно с заданной задержкой движется от начальной точки по одной точке, к точке назначения, когда весь код в методе гоу, и нет кнопки(button).
Решил немного подправить - добавил кнопку старт, которая должна запускать движение круга.
Работает, но теперь круг передвигается не плавно от точки к точке, а где-то внутри себя пропускает весь цикл и в итоге выбрасывает его уже в точке назначения - то-есть нет того плавного движения, которое было в первоначальной реализации программки.
Заранее благодарен за помощь
Листинг программы
- public class SimpleAnimation {
- int x = 70;
- int y = 70;
- public static void main(String[] args) {
- SimpleAnimation gui = new SimpleAnimation();
- gui.go();
- }
- public void go(){
- JFrame frame = new JFrame();
- JButton button = new JButton("Start animation");
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.getContentPane().add(BorderLayout.SOUTH, button);
- frame.getContentPane().add(panel);
- frame.setSize(300, 300);
- frame.setVisible(true);
- button.addActionListener(new ButtonListener());
- }
- MyDrawPanel2 panel = new MyDrawPanel2();
- public class ButtonListener implements ActionListener{
- @Override
- public void actionPerformed(ActionEvent arg0) {
- for (int i = 0; i < 130; i++) {
- x++;
- y++;
- panel.repaint();
- try{
- Thread.sleep(50);
- }
- catch(Exception e){
- System.out.println("Error? Repair me!");
- }
- }
- }
- }
- public class MyDrawPanel2 extends JPanel{
- public 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);
- }
- }
- }
Решение задачи: «Анимация в GUI»
textual
Листинг программы
- public class ButtonListener implements ActionListener{
- @Override
- public void actionPerformed(ActionEvent arg0) {
- Thread r = new Thread(new Runnable() {
- @Override
- public void run() {
- for (int i = 0; i < 130; i++) {
- x++;
- y++;
- panel.repaint();
- try {
- Thread.sleep(50);
- } catch (Exception e) {
- System.out.println("Error? Repair me!");
- }
- }
- }
- });
- r.start();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д