Wyjaśnienie, rozpisanie na prostszy zapis

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?

0

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

ActionListener al = new ActionListener()

i dalej:

jbtnAlpha.addActionListener(al)

pytanie: po co?

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.

0

Dzięki za pomoc ;)

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/7/docs/api/java/awt/event/ActionListener.html
http://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.html

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++;
                  }
     }
 }
0

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

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

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