Wyjaśnienie, rozpisanie na prostszy zapis

Odpowiedz Nowy wątek
2015-02-22 16:49
D3X
0

Cześć forumowicze,

    jbtnAlpha.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent ae) {
        jlab.setText("Naciśnięto przycisk Alfa.");
      }
    });

Czy jest mi w stanie ktoś wytłumaczyć prościej jak to działa? Jak rozumiem tworzenie nowego "elementu" jest w locie kiedy do program dojdzie do dodawania ActionListenera?

Można to rozpisać jakoś na czynniki pierwsze tak bym zrozumiał dokładniej o co w tym chodzi?

Czy nie można zrobić tego jakoś tak:
ActionListener al = new ActionListener() itd?

Pozostało 580 znaków

2015-02-22 17:25
0

Różnica będzie polegała na zapisie:

ActionListener al = new ActionListener()

i dalej:

jbtnAlpha.addActionListener(al)

pytanie: po co?

Pozostało 580 znaków

2015-02-22 17:31
0

Jeżeli chodzi o stosowanie listenerów ja to robię w taki sposób:

private class ListenForButton implements ActionListener{
    public void actionPerformed(ActionEvent e){

        // Check if the source of the event was the button

        if(e.getSource() == button1){

            buttonClicked++;
        }

    }

    }

I potem odwołanie:

ListenForButton lForButton = new ListenForButton();
button1.addActionListener(lForButton);

Najpierw tworzę klasę implementującą interfejs Listenera, potem ustawiam go na dany element.

Ok. No właśnie to chciałem sobie zobaczyć czy miałem rację, że da się jakoś to rozłożyć by sobie to uspójnić. Jeszcze jedna kwestia. Parametr w metodzie actionPerformed. Kiedy tam zostaje załadowany jakiś parametr? Jak to się dzieje? Bo jak mamy jakąś metodę public void costam(String costam) To muszę to wywołać poprzez costam("forum"); A tutaj? - D3X 2015-02-22 19:24
Argument do metody actionPerformed zostaje załadowany z automatu kiedy wykona się akcja na obiekcie, na którym ustawiliśmy listener. Dzięki temu możemy uzyskać informacje na temat zdarzenia i jego źródła. - raweos 2015-02-22 19:52
@raweos No tak się domyślałem, ze z automatu, ale jak to jest. W sensie po prostu trzeba wiedzieć, że z automatu i tyle? Przecież gdzieś to pod spodem musi być napisane, żeby się wywołało prawda? Przepraszam, że tak drążę. Ale mam taką naturę, że nie potrafię po prostu czegoś od tak przyjąć (przez co ciężko mi się uczy). - D3X 2015-02-22 20:19
@D3X O ile dobrze pamiętam, podczas kliknięcia na komponent np. button zostaje wywołana metoda fireActionPerformed(od AbstractButton), która powiadamia wszystkie listenery ustawione na ten button. A jeżeli chodzi konkretnie o ten argument ActionEvent to wiem tyle, że jest generowany przez komponent. Więcej na ten temat możesz znaleźć w dokumentacji: docs.oracle.com/javase/7/docs[...]va/awt/event/ActionEvent.html - raweos 2015-02-22 20:40

Pozostało 580 znaków

2015-02-22 20:43
D3X
0

Dzięki za pomoc ;)

Pozostało 580 znaków

2015-02-22 22:47
0
D3X napisał(a):

Przecież gdzieś to pod spodem musi być napisane, żeby się wywołało prawda?

No gdzieś na pewno, pewnie w JDK:

http://docs.oracle.com/javase[...]awt/event/ActionListener.html
http://docs.oracle.com/javase[...]ng/events/actionlistener.html

Pozostało 580 znaków

2015-02-23 07:58
0

Dodam tylko, że ActionListener jest interfejsem więc odpada utworzenie obiektu w taki sposób

ActionListener actionListener = new ActionListener();

Najczęstsze rozwiązanie dla użycia ActionListenera to utworzenie klasy anonimowej jak w pierwszym poście lub stworzenie klasy implementującej ten interfejs jak w poście trzecim. Osobiście tworzę pod każdy komponent własnego listenera i dzięki temu np. unikam sprawdzania, na którym obiekcie został zawołany

private class MyActionListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
         // -->if(e.getSource() == button1){
         // -->    buttonClicked++;
                  }
     }
 }

Pozostało 580 znaków

2015-02-23 09:51
0

Jeśli korzystasz z Java 8 to masz taki fajny zapis:

jbtnAlpha.addActionListener(e -> System.out.println("Click"));

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0