Java Swing: cómo animar / mover componentes sin problemas

Estoy tratando de averiguar cómo animar un componente swing para ir del punto a al punto b. Aquí hay un ejemplo de código de bebé que hace que un JPanel rojo se mueva de izquierda a derecha:


import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;

public class MovingSquareExample {

    private static final JPanel square = new JPanel();
    private static int x = 20;

    public static void createAndShowGUI(){
        JFrame frame = new JFrame();
        frame.getContentPane().setLayout(null);
        frame.setSize(500,500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(square);
        square.setBounds(20,200,100,100);
        square.setBackground(Color.RED);

        Timer timer = new Timer(1000/60,new MyActionListener());
        timer.start();
        frame.setVisible(true);
    }

    public static class MyActionListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent arg0) {
            square.setLocation(x++, 200);

        }

    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run(){
                createAndShowGUI();

            }
        });


    }

}

Funciona bien, es solo que me veo un poco revuelto. El movimiento para el ejemplo análogo con un cuadrado que se puede arrastrar (verComponentes arrastrables en Java Swing) parece mucho más suave, así que creo que debería haber una manera de hacer que esto se vea mejor. Cualquier sugerencia sería muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta