Vereinfachung von if- Abfragen

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
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



Code:
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);
 
Ja mit einer HashMap:
Code:
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 ;-)
 
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.:
Code:
HashMap<String, Color> colorMap = ..;

colorMap.put( "grau", Color.LIGHT_GRAY );
...
 
Code:
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
 
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
 
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
 
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: 😀
 
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




Code:
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)));
 
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)
 
Ja, hab ich auch, es geht ja schon, nur mit if- Schleifen eben und ich möchte es eben mit einer HashMap machen.
 
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
 
ich werds mal so lassen, keine Ahnung was es da bei mir hat.

Vielen DANK auf jeden Fall für eure Antworten
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben