# Vereinfachung von if- Abfragen



## MQue (18. Apr 2007)

Hallo,

ich habe unteren Code in meinem Programm und frage mich, ob das nicht irgendwie einfacher zu machen ist, bzw. nicht einfacher aber mit weniger Zeilen Code.
Hat da jemand einen Tipp.

Vielen DANK!!

lg 
Michl




```
if (hgFarbeAnzeige.equals("hellgrau"))
	    wertAnzeige.setBackground(Color.LIGHT_GRAY);
	else if (hgFarbeAnzeige.equals("grau"))
	    wertAnzeige.setBackground(Color.GRAY);
	else if (hgFarbeAnzeige.equals("gruen"))
	    wertAnzeige.setBackground(Color.GREEN);
	else if (hgFarbeAnzeige.equals("rot"))
	    wertAnzeige.setBackground(Color.RED);
	else if (hgFarbeAnzeige.equals("blau"))
	    wertAnzeige.setBackground(Color.BLUE);
	else if (hgFarbeAnzeige.equals("weiss"))
	    wertAnzeige.setBackground(Color.WHITE);
	else if (hgFarbeAnzeige.equals("gelb"))
	    wertAnzeige.setBackground(Color.YELLOW);
```


----------



## schalentier (18. Apr 2007)

Ja mit einer HashMap:

```
HashMap<String, Color> colorMap = ..;

colorMap.put( "grau", Color.LIGHT_GRAY );
...

Color bgCol = colorMap.get( hgFarbAnzeige );
wertAnzeige.setBackground( bgCol );
```

Werden zwar nicht weniger Zeilen, aber ist eindeutig besserer Code ;-)


----------



## MQue (18. Apr 2007)

Und wie kann ich das genau machen -> is mir nicht ganz klar, was ich in der ersten Zeile hinschreibe.

Vielen DANK für die Hilfe.

lg




			
				schalentier hat gesagt.:
			
		

> ```
> HashMap<String, Color> colorMap = ..;
> 
> colorMap.put( "grau", Color.LIGHT_GRAY );
> ...


----------



## schalentier (18. Apr 2007)

```
HashMap<String, Color> colorMap = new HashMap<String,Color>();

colorMap.put( "hellgrau", Color.LIGHT_GRAY );
colorMap.put( "grau",     Color.GRAY );
colorMap.put( "gruen",    Color.GREEN );
colorMap.put( "rot",      Color.RED );
...

Anstatt der if-Kaskade:

Color bgCol = Color.BLACK; // default Farbe

if( colorMap.containsKey( hgFarbAnzeige ) ) { // string in der Map?
  bgCol = colorMap.get( hgFarbAnzeige ); // dann zugehoerige Color rausholen
}

wertAnzeige.setBackground( bgCol ); // farbe setzen
```


----------



## MQue (18. Apr 2007)

genau, das wollt ich auch gerade noch schreiben "containsKey".

Eine Frage hätte ich noch: kann ich das auch irgendwie machen: 
HashMap<String,Border> borderMap = new HashMap<String,Border>();  -> so gehts nämlich nicht. 
Mit Border ist gemeint: BeveledBorder, SoftBeveledBorder, TitleBorder usw.
Vielen Dank für Deine Hilfe!!!
Danke

lg
Michl


----------



## EOB (18. Apr 2007)

warum gehts denn nicht? meldet der compiler was?

grüße


----------



## MQue (18. Apr 2007)

Schon alleine wenn ich das hinschreibe: HashMap<String,Border> borderMap = new HashMap<String,Border>();
dann zeigt er mir einen Fehler an obwohl ich ja alles übergeben kann, da ja <Object, Object> verlangt wird und ja alles von Objekt abgeleitet ist (ich hoffe das stimmt)

lg


----------



## schalentier (18. Apr 2007)

Verwendest du Java 1.5 oder was aelteres?


----------



## EOB (18. Apr 2007)

ja, ich nehme an, du hast kein java 5 oder du hast java 5 und deine ide kann das nicht erkennen. also:

welche java version und welche ide nutzt du?

grüße

ps: was von wo abgeleitet ist kannst du ja in der api nachlesen... :meld:


----------



## PollerJava (18. Apr 2007)

ich verwende NetBeans und die Version 1.6.0-b105 (laut java -version)
was auch immer das b105 heißt.


----------



## L-ectron-X (18. Apr 2007)

Ohne die Fehlermeldung können wir ja noch ne Weile raten...  :roll:


----------



## EOB (18. Apr 2007)

geh doch mal auf die konsole undschreib: *java -version*. dann poste mal die ausgabe

grüße


----------



## MQue (18. Apr 2007)

Ich hab die Version 1.5.0, wenn ich eben das untere Eingebe:
HashMap<String,Border> borderMap5 = new HashMap<String,Border>();
bekomme ich: cannot find symbol.
Ich möchte das untere eben in eine HashMap geben, da ich die Border sehr oft in meinem Programm brauche.

Vielen Dank für Eure Hilfe.

lg
Michl





```
if (borderWertAnzeig.equals("BeveledBorder"))
	    wertAnzeige.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
	else if (borderWertAnzeig.equals("SoftBeveledBorder"))
	    wertAnzeige.setBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.LOWERED));
	else if (borderWertAnzeig.equals("EtchedBorder"))
	    wertAnzeige.setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.BevelBorder.LOWERED));
	else if (borderWertAnzeig.equals("LineBorder"))
	    wertAnzeige.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
```


----------



## bygones (18. Apr 2007)

hast die du Klassen auch importiert ?

also java.util.HashMap usw ?


----------



## EOB (18. Apr 2007)

poste doch ma die fehlermeldung, damit man sieht, welches symbol...


----------



## MQue (18. Apr 2007)

Ja ich hab util importiert, es geht ja, wenn ich schreibe:
HashMap<String, Color> colorMap = new HashMap<String,Color>(); -> das funktioniert, nur mit Border eben nicht



C:\.java:52: cannot find symbol
symbol  : class Border
location: class net.hashMap
        HashMap<String,Border> borderMap9 = new HashMap<String,Border>();
                       ^
C:.java:52: cannot find symbol
symbol  : class Border
location: class net.hashMap
        HashMap<String,Border> borderMap9 = new HashMap<String,Border>();
                                                               ^
2 errors
BUILD FAILED (total time: 0 seconds)


----------



## EOB (18. Apr 2007)

*javax.swing.border* importiert?


----------



## MQue (18. Apr 2007)

Ja, hab ich auch, es geht ja schon, nur mit if- Schleifen eben und ich möchte es eben mit einer HashMap machen.


----------



## bygones (18. Apr 2007)

kannst du mal deinen code zeigen....

ne andere frage... woher kommt die variable hgFarbeAnzeige... gibt die der user ein oder so ? per textfeld oder wie... weil wenn es moeglich waere, waere es am einfachsten einfach ueberall intern mit Color.GRAY oder so au arbeiten und nicht noch Strings nehmen


----------



## EOB (18. Apr 2007)

es ist übrigens keine if SCHLEIFE...


----------



## Marcel_Handball (18. Apr 2007)

Eine alternative zu der HashMap wäre auch ein enum + eine switch-Anweisung


----------



## MQue (18. Apr 2007)

ich werds mal so lassen, keine Ahnung was es da bei mir hat.

Vielen DANK auf jeden Fall für eure Antworten


----------

