Una semplice animazione

Da Head First Java O'Reilly, capitolo 12.

Dovendo fare una animazione, e potendo scegliere il linguaggio di programmazione, io punterei su JavaFx, che semplifica molto la vita dello sviluppatore in questo contesto.

Questa piccola applicazione, disegnamo una palla che si muove di moto rettilineo uniforme, ha piuttosto l'intenzione di mostrare un altro utilizzo della classe interna (inner class) in Java.

L'idea é che abbiamo due oggetti di due classi diverse, uno fa da controller, l'altro cura la visualizzazione della palla. Il secondo oggetto deve accedere variabili private del primo, in modo da sapere dove disegnare la palla, deve quindi guadagnare in qualche modo un accesso privilegiato.

Il meccanismo della classe interna entra perfettamente in gioco in questa situazione. Vediamo il sorgente:

import java.awt.*;
import javax.swing.*;

public class SimpleAnimation {
private JFrame frame;
private int x = 70;
private int y = 70;

public SimpleAnimation() {
frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new MyPanel());
frame.setSize(300, 300);
frame.setVisible(true);

go();
}

private void go() {
for(int i = 0; i < 130; ++i) {
++x;
++y;

frame.repaint();
try { Thread.sleep(50); } catch(InterruptedException ie) {}
}
}

private class MyPanel extends JPanel {
@Override
public void paintComponent(Graphics g) {
g.setColor(Color.GREEN);
g.fillOval(x, y, 40, 40);
}
}

public static void main(String[] args) {
new SimpleAnimation();
}
}

La inner class MyPanel usa x e y, variabili membro privati di SimpleAnimation, come base per disegnare la palla. Il metodo go() di SimpleAnimation modifica x e y, genera un repaint della finestra - e quindi chiama anche paintComponent() di MyPanel -, e poi dormicchia per mezzo decimo di secondo, per dare una sensazione di tranquillo spostamento della palla.

Nessun commento:

Posta un commento