[java] eigen events schrijven

Pagina: 1
Acties:

  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 11-06 11:16
Op het moment ben ik bezig om een eigen klasse te maken die events moet gaan genereren. Ik ben er echter nog niet helemaal achter hoe ik deze events kan versturen aan de ActionListener. Wie helpt?

Ik heb de volgende code:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.awt.*;
import java.awt.event.*;

public class Test {
  
  ActionListener al;

  public Test() {
    
  }
  
  public void addActionListener( ActionListener al ){
    this.al = al;
  }
  
  public void testEventDispatch(){
    ActionEvent ae = new ActionEvent( 
      this, ActionEvent.ACTION_PERFORMED, "TEST" 
    );
  }
}

Pwnd


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Java:
1
2
3
4
public void testEventDispatch(){
   ActionEvent ae = new ActionEvent(this, ActionEvent.ACTION_PERFORMED, "TEST" );
     al.actionPerformed(ae);
}

[ Voor 25% gewijzigd door Alarmnummer op 06-02-2003 17:00 ]


  • Donderwolk
  • Registratie: Januari 2002
  • Laatst online: 11-06 11:16
Ja dat is het! Dat ik daar niet zelf op ben gekomen... |:(
Heel erg bedankt iig Alarmnummer, ik kan weer verder :)

Pwnd


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

En als je zelf nog events wilt schrijven:
[rml][ java] custom event listener[/rml]

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Waarom maar 1 actionListener. Het zou imho generieker zijn als er meer events aangenomen zouden kunnen worden.
Denk bijvoorbeeld aan grafiekdata die kan veranderen, waaraan je meerdere grafiekweergaves kan hangen, die elk gewaarschuwd moeten worden bij het updaten.

Daarom hier wat aangepaste code van je, om zo het Observer pattern weer te geven.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public interface ActionObserverable {
        
  public void addActionListener( ActionListener al );
  public void removeActionListener( ActionListener al );
  public void notifyAllListeners( ActionEvent event );
}

public class Test implements ActionObserverable{ 
   
  List _listeners       = new ArrayList() 

  /**
   * Waarom een lege default constructor?
   * Die genereert de compiler wel voor je hoor ;)
   */
  public Test() {      
  } 
  
  /**
   * Add an actionListener as registered listener from this class
   * This listener will be notifyed if an action occures
   */
  public void addActionListener( ActionListener al ){ 
    
    if( al == null )
            throw new NullPointerException( "The listener cannot be null" );
            
    _listeners.add( al ); 
  } 
  
  /**
   * Remove an actionListener as registered listener from this class
   * This listener will be not be notifyed anymore if an action occures
   */
  public void removeActionListener( ActionListener al ){ 
    
    if( al == null )
            throw new NullPointerException( "The listener cannot be null" );
            
    _listeners.remove( al ); 
  }

  public void notifyAllListeners( ActionEvent event ) {
          
    for( Iterator iter = _listeners.iterator(); iter.hasNext(); ) {
            ActionListener listener = (ActionListener) iter.next();
            listener.actionPerformed( event );
            
    }
  }
            
  public void testEventDispatch(){ 
    ActionEvent ae = new ActionEvent(  this, ActionEvent.ACTION_PERFORMED, "TEST" );
    notifyAllListeners( ae ); 
    
  } 
  
}


Nou voldoet jou Eventtossende class aan een interface, nl. het is nu bekend dat hij een Observerable is ( een class de in de gaten wordt gehouden zeg maar ) Natuurlijk kun je iets andere keuzes maken (bijv notifyAllListeners niet public, en de List _listeners, addActionListener() en removeActionListener in een abstracte class te zetten, maar het idee is hopelijk duidelijk :)