2014-05-01 40 views
5

Więc, postaram się wyjaśnić to pytanie ...Czy istnieje skuteczniejszy sposób obsługi zdarzeń kliknięcia przycisku niż kilka instrukcji if?

Zasadniczo mam GUI, którego główne okno ma kilka przycisków (prawdopodobnie około 10). Umieszczam przyciski w tablicy, ale jeśli chodzi o obsługę zdarzeń kliknięcia dla każdego przycisku, stanie się coś innego w zależności od tego, który z nich zostanie kliknięty.

Zamiast robić coś takiego:

@Override 
public void actionPerformed(ActionEvent e) { 
    if(e.getActionCommand().equals("Button1Text") { /* do stuff */ } 
    else if(e.getActionCommand().equals("Button2Text") { /* do stuff */ } 
    else if(e.getActionCommand().equals("Button3Text") { /* do stuff */ } 
    else if(e.getActionCommand().equals("Button4Text") { /* do stuff */ } 
} 

Czy jest bardziej efektywny sposób obsłużyć odpowiedź każdy przycisk, gdy robi kliknięciu? Chodzi o to, że po kliknięciu przycisku otworzy się nowe okno umożliwiające użytkownikowi wykonywanie różnych zadań związanych z tym przyciskiem. Myślałem o użyciu getActionCommand() w połączeniu z metodami Class.forName()/newInstance(), ale nie jestem pewien, czy istnieje inny (lub łatwiejszy) sposób na zrobienie czegoś takiego.

+1

Prawdopodobnie zamierzam sprawić, że będę tu wyglądał głupio, ale dlaczego nie przypiszesz każdemu przyciskowi jego własnego ActionListener? – Gorbles

Odpowiedz

7

Pokazany ActionListener jest czasem nazywany "słuchaczem centralki" i masz rację, sądząc, że można go ulepszyć. Jest to dość sztywny kod, co utrudnia debugowanie i ulepszanie.

Najlepszy myślę byłoby nie mieć GUI wdrożyć ActionListener w ogóle, ale raczej wykorzystanie unikalnych Actions (tj AbstractActions) dla każdego klasy przycisku, a następnie podłączyć odpowiednie działania w odpowiedni przycisk. Aby podłączyć przy minimalnym sprzężeniu, rozważ użycie iniekcji zależności a la Spring lub Guice.