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]