Lösung Übung 11: Wahlergebnis


<HTML>
<!-- HTML-Testdatei fuer Java-Applet WahlErgebnis2-->
<BODY>
<applet code="WahlErgebnis2.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&uuml;ne">
<param name="Prozent2" value="12.3">
<param name="Farbe2" value="Gruen">
</applet>
</BODY></HTML>

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

public class WahlErgebnis2 extends Applet {
	
	private String[] parteien;
	private Color[] parteiFarben;
	private String[] prozente;
		
	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
		
		// 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;
		}

	}

	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;
			}
		}					
	}
	
	private double String2Double( String str ) {
		double retValue = 0.0;
		
		try {
			Double temp = Double.valueOf(str);
			retValue = temp.doubleValue();
		}
		catch( NumberFormatException e ) {
		}
		
		return(retValue);	
	}
			
	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;
				
		for( int i = 0; i < parteien.length; i++ ) {
			// Textausgabe
			g.setColor(Color.black);		
			g.drawString( parteien[i], xpos1, ypos );
	
			// Balkenausgabe
				
			double wert = String2Double( prozente[i] );
			int balkenLen = (int)(wert*scale);
			g.setColor(parteiFarben[i]);
			g.fillRect( xpos2, ypos-height/2, balkenLen, 10 );	
	
			// Prozentausgabe
			g.setColor(Color.black);		
			g.drawString( prozente[i] + " %", xpos2+balkenLen+5, ypos );			
	
			// Zeilensprung
			ypos += height+5;
		}
	}		
}
																
[Index][Alternative]