All pastes #252568 Raw Edit

Stuff

public text v1 · immutable
#252568 ·published 2006-11-19 18:36 UTC
rendered paste body
// Voorbeeld 14.11
// Dubbele buffering
import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Vb14_11 extends Applet {
  private Animatie animatie;
  private Button startKnop, stopKnop;

  public void init() {
    startKnop = new Button( "Start" );
    startKnop.addActionListener( new StartKnopHandler() );

    stopKnop = new Button( "Stop" );
    stopKnop.addActionListener( new StopKnopHandler() );

    add( startKnop );
    add( stopKnop );
  }

  public void start() {
    if( animatie == null ) {
      animatie = new Animatie( this );
      animatie.start();
    }
  }

  public void stop() {
    if( animatie != null ) {
      animatie.nuStoppen();
      animatie = null;
    }
  }

  class StartKnopHandler implements ActionListener {
    public void actionPerformed( ActionEvent e ) {
      start();
    }
  }

  class StopKnopHandler implements ActionListener {
    public void actionPerformed( ActionEvent e ) {
      stop();
    }
  }
}

class Animatie extends Thread {
  private boolean doorgaan;
  private Image buffer;
  private Graphics g, gB;
  private Applet applet;
  private int appletBreedte, appletHoogte;
  private int x, hoek;

  // constructor
  public Animatie( Applet applet ) {
    this.applet = applet;
    g = applet.getGraphics();
    appletBreedte = applet.getSize().width;
    appletHoogte = applet.getSize().height;
    buffer = applet.createImage( appletBreedte, appletHoogte );
    gB = buffer.getGraphics();
    doorgaan = true;
    x = 0; 
    hoek = 0;
  }
  
  public void run() { 
    while( doorgaan ) { 
      // Bouw een nieuw beeld op in de buffer
      gB.setColor( Color.red );
      gB.fillArc( x, 100, 100, 100, hoek, 270 );
      // Zet inhoud van buffer op scherm en slaap even
      g.drawImage( buffer, 0, 0, applet );
      slaap( 10 );
      // Veeg de buffer schoon
      gB.setColor( applet.getBackground() );
      gB.fillRect(0, 0, appletBreedte, appletHoogte);
      hoek -= 3 ; 
      x = (int) ( -hoek * 314.1 / 360 );
    }
  }
  
  public void nuStoppen() {
    doorgaan = false;
    gB.dispose();
  }
  
  private void slaap( int millisec ) {
    try {
      sleep( millisec );
    }
    catch( InterruptedException e ) {}
  }
}