Lösung Übung 11: Wahlergebnis 4

 

Hinweis: Dieses Applet verwendet Methoden, die erst seit Java 1.2 verfügbar sind. Daher kann es nur von neuesten Browsern (ab Herbst/Winter 1999) fehlerfrei dargestellt werden.

...

<applet code="WahlErgebnis4.class" width="400" height="200">
<param name="Partei0" value="CDU">
<param name="Prozent0" value="48.0">
<param name="Farbe0" value="Schwarz">
<param name="Partei1" value="SPD">
<param name="Prozent1" value="35.6">
<param name="Farbe1" value="Rot">
<param name="Partei2" value="B90/Grüne">
<param name="Prozent2" value="12.3">
<param name="Farbe2" value="Gruen">
<param name="Bild" value="berlin.gif">

</applet>

...


import java.awt.*;
import java.applet.Applet;

public class WahlErgebnis4 extends Applet implements Runnable {
	
	private String[] parteien;
	private Color[] parteiFarben;
	private String[] prozente;

	private MediaTracker tracker;
	private Image img;
	private Thread animation;
	private int step;
	private int maxSteps;
	private Font f;
	private int height;
	private int maxParteiLength;
	
	private int anzahlParteien;
	
	public void init() {
		// Parameter einlesen
		anzahlParteien = getAnzahlParteien();	// Ermittelt Anzahl der Parteien
		getParametersParteien();				// Liest Parteibezeichnungen ein				
		getParametersProzente();				// Liest Prozente ein
		getParametersFarben();					// Liest Parteifarben ein
		
		String bildName;
		
		if( (bildName = getParameter("Bild")) != null ) {
			tracker = new MediaTracker(this);
			img = getImage( getCodeBase(), bildName );	
			tracker.addImage(img, 0);
		}
		
		// Einmalige Initialisierungen
		f = new Font("SansSerif", Font.BOLD, 14);
		setFont(f);
		FontMetrics fm = getFontMetrics(f);
		height = fm.getHeight();
			
		for( int i = 0; i < parteien.length; i++ ) {
			int len = fm.stringWidth(parteien[i]);
			if( maxParteiLength < len )
				maxParteiLength = len;
		}
		for( int i = 0; i < prozente.length; i++ ) {
			double wert = Double.parseDouble(prozente[i]);
			if( maxSteps < (int)wert + 1 )
				maxSteps = (int)wert + 1;
		}
	}

	public void start() {
	
		if( animation == null ) {
			animation = new Thread( this );			
			step = 0;
			animation.start();
		}
	}
	
	public void stop() {
	
		if( animation != null ) {
			animation = null;	
		}
	}
	
	public void run() {
		// Eben warten, bis das Bild vollstaendig geladen ist
	    try {
			tracker.waitForID(0);
		} 
		catch (InterruptedException e) {
			return;
	    }

		while( step < maxSteps ) {
			step++;
			repaint();
			try {		
				animation.sleep(100);
			}
			catch( InterruptedException e ) {
				break;
			}
		}
	}
	
	public void update( Graphics g ) {
		paint(g);
	}
	
	public int getAnzahlParteien() {
		int anzahl = 0;
		
		// Mehr als 100 sollen es ja wohl nicht sein ...
		for( ; anzahl < 100; anzahl++ ) {
			String pWert = "Partei" + anzahl;
			String partei = getParameter( pWert );
			
			if( partei == null ) // Schluss!!!
				break;
		}	
		
		return( anzahl );	
	}
	
	public void getParametersParteien() {
		// Array deklarieren
		parteien = new String[ anzahlParteien ];
		
		for(int i=0; i < parteien.length; i++) {
			String pWert = "Partei" + i;
			parteien[i] = getParameter( pWert );
			// Wenn Parameter nicht vorhanden, dann ist Schluss
			if( parteien[i] == null )
				break;	
		}		
	}
	
	public void getParametersProzente() {
		// Array deklarieren
		prozente = new String[ anzahlParteien ];
		
		for(int i=0; i < prozente.length; i++) {
			String pWert = "Prozent" + i;
			prozente[i] = getParameter( pWert );
			// Wenn Parameter nicht vorhanden, dann ist Schluss
			if( prozente[i] == null )
				break;
		}				
	}
	
	public void getParametersFarben() {
		// Array deklarieren
		parteiFarben = new Color[ anzahlParteien ];
		
		for(int i=0; i < parteiFarben.length; i++) {
			String pWert = "Farbe" + i;

			String farbe = getParameter( pWert );
			// Wenn Parameter nicht vorhanden, dann ist Schluss
			if( farbe == null )
				break;
			else {
				if( farbe.equals("Rot") )
					parteiFarben[i] = Color.red;
				else if( farbe.equals("Schwarz") )
					parteiFarben[i] = Color.black;
				else if( farbe.equals("Gruen") )
					parteiFarben[i] = Color.green;
				else if( farbe.equals("Blau") )
					parteiFarben[i] = Color.blue;
				else
					parteiFarben[i] = Color.lightGray;
			}
		}					
	}
	
	public void paint( Graphics g ) {
		// Position Text	
		int xpos1 = 10;
		// Position Balken
		int xpos2 = xpos1 + maxParteiLength + 5;
		// Vertikale Startposition
		int ypos = 10 + height;
		int scale = 5;
		int imgx = 0; 
		int imgy = 0;
		if( img != null ) {
			g.drawImage( img, xpos1, ypos, this );
			imgx = img.getWidth(this);
			imgy = img.getHeight(this);
		}
		
		g.setColor( Color.blue );
		g.drawString("Wahlergebnisse", xpos1 + imgx, ypos + imgy/2);
		
		ypos += imgy+height;
		for( int i = 0; i < parteien.length; i++ ) {
			// Textausgabe
			g.setColor(Color.black);		
			g.drawString( parteien[i], xpos1, ypos );
	
			// Balkenausgabe
			double wert = Double.parseDouble( prozente[i] );
			double aktuellerWert = Math.min( (double)step, wert );
			int balkenLen = (int)(aktuellerWert*scale);
			g.setColor(parteiFarben[i]);
			g.fillRect( xpos2, ypos-height/2, balkenLen, 10 );	
	
			// Prozentausgabe
			if( step == maxSteps ) {
				g.setColor(Color.black);		
				g.drawString( prozente[i] + " %", xpos2+balkenLen+5, ypos );			
			}
			
			// Zeilensprung
			ypos += height+5;
		}
		
	}		
}
																										    		
															
[Index]