switch/actionPerformed

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo,

in meiner actionPerformed- Methode reagiere ich auf verschiedenen JButton- drücke (quit, kommen, gehen),

Bis jetzt hab ich das mit einer if- Abfrage unterschieden:

Code:
if (e.getActionCommand().equals("kommen"))                                                     
            { 
}
else if (....)

Kann ich das irgendwie auch mit einer switch- Anweisung machen (switch lässt ja nur integer zu aber gibts irgendeine möglichkeit) sodass es übersichtlicher wird,


lg
 
S

SlaterB

Gast
schreibe die commands in ein Array,
durchlaufe das Array in einer Schleife, erhalte so einen Index 0 bis n,
switche nach dem Index

oder erstelle eine Map String-Command -> Integer,
dann bekommst du den Index in einem Schritt
int index = map.get(command);

-------

du kannst ansonsten zumindest das command herausziehen:
String c = e.getActionCommand();

if (c.equals("kommen"))
{
}
else if (....)

ist doch keine große Sache
 

PollerJava

Top Contributor
Vielen Dank,

Hätte noch so ein Konstrukt, welches mir nicht so gut gefällt:


Code:
 if (gekommen != null && gegangen == null && quit == null)
                mode = 0;
            else if (gegangen != null && gekommen == null && quit == null)
                mode = 1;
            else if (quit != null && gekommen == null && gegangen == null)
                mode = 2;
            else if (gekommen != null && gegangen != null) 
                mode = 3;
            else if (gekommen != null && quit != null) 
                mode = 4;
            else if (gekommen == null && gegangen == null && quit == null)
                mode = 5;     

switch (mode) {...

Gibts da vielleicht auch eine bessere Möglichkeit?


Vielen Dank,
 
S

SlaterB

Gast
mode = (gekommen != null ? 1 : 0) + (gegangen != null ? 2 : 0) +(quit != null ? 4: 0);

switch
case 0: // alter mode 5
..
break;
case 1: // alter mode 0
..
break;
..........

case 5:
case 7: // zusammen alter Mode 4
...
break;
 

Marco13

Top Contributor
SlaterB hat gesagt.:
schreibe die commands in ein Array,
durchlaufe das Array in einer Schleife, erhalte so einen Index 0 bis n,
switche nach dem Index
...

Jo, tolle Idee. (Sonst sagst du doch meistens ganz vernünftige Sachen ???:L ). Das läuft ja (nach einem kleinen "unrolling") irgendwie auf sowas raus...
Code:
int n = 0;
if (command.equals("a")) n = 1;
if (command.equals("b")) n = 2;
if (command.equals("c")) n = 3;
if (command.equals("d")) n = 4;
if (command.equals("e")) n = 5;
switch (n)
{
     case 1: machA(); break;
     case 2: machB(); break;
     case 3: machC(); break;
     case 4: machD(); break;
     case 5: machE(); break;
}

Man sollte nicht krampfhaft ein switch erzwingen, wenn es keinen Sinn macht. So eine unübersichtliche actionPerformed läßt sich eher über anonyme Listener vermeiden, und selbst das ist in manchen Fällen nichtmal notwendig....

Zu dem Zweiten Konkstrukt ... da müßte man wohl wissen, WIE und WO "gegangen", "gekommen" und "quit" ihre Werte erhalten, auf Basis derer dann später (wieder über ein reingekrampftes switch) die Entscheidung getroffen werden soll...
 
S

SlaterB

Gast
was genau ist denn an der Idee nicht toll?
dass if else direkter ist habe ich ja auch geschrieben,

ansonsten ist das eine effektive Code-Verkürzung, wenn man darauf Wert legt,
(edit: durch die Map erhält man sogar einen Geschwindigkeitsvorteil,
was in manchen Situationen also generell zu empfehlen ist,
alle Mappings String -> Enum arbeiten z.B. so)

dass PollerJavas Programme eh immer komplett umzuschreiben wären bleibt davon unberührt ;)

--------

> Zu dem Zweiten Konkstrukt ...

und hat dein Einwand auch irgendwelche Auswirkungen?
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben