Анимация в 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();
        }
    }

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


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

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

14   голосов , оценка 3.643 из 5