Lösung Übung 11: Wahlergebnis 2 (Alternativlösung mit Klasse Partei)

import java.util.*;
import java.awt.*;


public class Partei {

	private String parteiName;
	private String parteiProzente;
	private Color parteiFarbe;
	
	public Partei( String name, String prozente, int r, int g, int b) {
		parteiName = name;
		parteiProzente = prozente;
		parteiFarbe = new Color(r,g,b);	
	}
	
	public Partei( String paramStr ) {
		tokenize( paramStr );	
	}
	
	public void setName( String name ) {
		parteiName = name;	
	}
	
	public void setProzente( String prozente ) {
		parteiProzente = prozente;
	}
	
	public void setFarbe( int r, int g, int b ) {
		parteiFarbe = new Color( r, g, b );	
	}
	
	public String getName() {
		return( parteiName );	
	}
	
	public String getProzente() {
		return( parteiProzente );	
	}
	
	public Color getFarbe() {
		return( parteiFarbe );	
	}
	
	private void tokenize( String paramStr ) {
		int red = 0;
		int green = 0;
		int blue = 0;
		
		StringTokenizer st = new StringTokenizer( paramStr, "," );
		
		int num = st.countTokens();
		
		for(int i = 0; i < num; i++) {
			if( st.hasMoreTokens() ) {
				String token = st.nextToken();
				
				switch(i) {
					case 0:
						parteiName = token;
						break;
					case 1:
						parteiProzente = token;
						break;
					case 2:
						red = Integer.parseInt(token);
						break;
					case 3:
						green = Integer.parseInt(token);
						break;
					case 4:
						blue = Integer.parseInt(token);
						break;
					default:
						break;
				}
			}			
		}

		setFarbe( red, green, blue );			
	}
				
}

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

public class WahlErgebnis2a extends Applet {
	
	Vector parteien;

	private Font f;
	private int height;
	private int maxParteiLength;
		
	public void init() {
		// Parameter einlesen
		getParameters();

		// Einmalige Initialisierungen
		f = new Font("SansSerif", Font.BOLD, 14);
		setFont(f);
		FontMetrics fm = getFontMetrics(f);
		height = fm.getHeight();
			
		for( Enumeration e = parteien.elements(); e.hasMoreElements(); ) {
		
			Partei p = (Partei)e.nextElement();
			int len = fm.stringWidth( p.getName() );
			if( maxParteiLength < len )
				maxParteiLength = len;
		}

	}

	public void getParameters() {

		parteien = new Vector();
		
		int i = 0;
		while( true ) {
		
			String pWert = "Param"+i;
			String paramString	= getParameter( pWert );	

			if( paramString == null )
				break;
			else {
				Partei temp = new Partei( paramString );
				parteien.addElement( temp );					
			}

			i++;
		}
	}
	
	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( Enumeration e = parteien.elements(); e.hasMoreElements(); ) {
		
			Partei p = (Partei)e.nextElement();
			
			// Textausgabe
			g.setColor(Color.black);		
			g.drawString( p.getName(), xpos1, ypos );
	
			// Balkenausgabe
			double wert = String2Double( p.getProzente() );
			int balkenLen = (int)(wert*scale);
			g.setColor( p.getFarbe() );
			g.fillRect( xpos2, ypos-height/2, balkenLen, 10 );	
	
			// Prozentausgabe
			g.setColor(Color.black);		
			g.drawString( p.getProzente() + " %", xpos2+balkenLen+5, ypos );			
	
			// Zeilensprung
			ypos += height+5;
		}
	}		
}
																																				mport java.awt.*;
																
[Index]