これは、ゼロから完全にペイントおよびアニメーション化された破線の移動の小さな例です。
private static int speed = 5;
public static void main ( String[] args )
{
JFrame frame = new JFrame ();
frame.setLayout ( new BorderLayout () );
frame.add ( new JComponent ()
{
private int diff = 0;
{
final Timer timer = new Timer ( 1000 / ( 10 * speed ), null );
timer.addActionListener ( new ActionListener ()
{
public void actionPerformed ( ActionEvent e )
{
if ( diff < 20 )
{
diff++;
}
else
{
diff = 0;
}
repaint ();
timer.setDelay ( 1000 / ( 10 * speed ) );
}
} );
timer.start ();
}
protected void paintComponent ( Graphics g )
{
Graphics2D g2d = ( Graphics2D ) g;
g2d.setRenderingHint ( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON );
g2d.setStroke (
new BasicStroke ( 5f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1f,
new float[]{ 10f, 10f }, diff ) );
g2d.setPaint ( Color.BLACK );
g2d.drawLine ( 0, getHeight () / 2, getWidth (), getHeight () / 2 );
}
} );
frame.add ( new JSlider ( JSlider.HORIZONTAL, 1, 10, speed )
{
{
addChangeListener ( new ChangeListener ()
{
public void stateChanged ( ChangeEvent e )
{
speed = getValue ();
}
} );
}
}, BorderLayout.SOUTH );
frame.setSize ( 500, 500 );
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );
}
基本的にアニメーションの場合、アニメーション化するもののほとんどをペイントする必要があります。あなたの場合、それが破線で接続された2つのオブジェクトである場合、その接続をペイントするコンテナと、その上に配置された単純なSwingコンポーネントを使用できます。したがって、それらの境界を検出し、接続線を描画します...