Events

Status
Nicht offen für weitere Antworten.

HeribertH

Mitglied
Hi!

Ich bin recht neu in Java, komme aber mit den Grundlagen ganz gut zurecht. Ich komme von Delphi und C#. Ich würde gerne eigene Ereignisse, wie ich in den beiden anderen Sprachen schon oft gemacht habe, programmieren. Wenn ich was über Java und Ereignisse lese, dann immer nur im Zusammenhang mit AWT.
Es wird doch auch anderweitig möglich sein Eregnisse zu implementieren und dann im Programm abzufangen.

Kennt jemand gute Hilfestellungen?

Vielen Dank!

Gruß
Heribert
 
S

SlaterB

Gast
große Frameworks wie AWT machen Sinn, wenn du auf Systemereignisse wie Mausklicks + Tastatur reagieren willst,

je nach Definition ist jeder Operationsaufruf ein Ereignis,
du musst dir erst überlegen was du haben willst, dann kann man es programmieren..

Observer/ Observable sind dennoch Klassen, die du vielleicht anschauen möchtest
 
G

Guest

Gast
Ereignisse, vom Typ eines delegaten, wie in C# gibts meines Wissens nach in Java nicht, da es in Java keine Zeiger gibt. Meinst du das?
 
G

Guest

Gast
Anonymous hat gesagt.:
Ereignisse, vom Typ eines delegaten, wie in C# gibts meines Wissens nach in Java nicht
Definitiv nicht. Schade eigentlich, das spart einem viel Getippe.

In Java gibt es mehrere Möglichkeiten.

1) Observer/Observable
2) Eigene Events und EventListener (im Prinzip gleich wie 1, nur etwas anders ;))
3) PropertyChangeListener bzw. VetoablePropertyChangeListener

Hier mal ein Beispiel zu 2 anhand eines Counters (was anderes fällt mir gerade nicht ein)

Code:
public class CounterEvent extends EventObject
{
   private static final long serialVersionUID = 2538632333955403453L;
   private Long value;
   
   public CounterEvent(Object source, Long value)
   {
      super(source);
      this.value = value;
   }
   
   public Long getValue()
   {
      return value;
   }
}

public interface CounterListener extends EventListener
{
   void counterIncreased(CounterEvent event);
   void counterDecreased(CounterEvent event);
}

public class CounterAdapter implements CounterListener
{
   public CounterAdapter()
   {
   }

   public void counterIncreased(CounterEvent event)
   {
   }
   
   public void counterDecreased(CounterEvent event)
   {
   }
}

public class CounterListenerSupport 
{
   private EventListenerList listenerList = new EventListenerList();
   
   public CounterListenerSupport()
   {
   }
   
   public void addCounterListener(CounterListener listener)
   {
      listenerList.add(CounterListener.class, listener);
   }

   public void removeCounterListener(CounterListener listener)
   {
      listenerList.remove(CounterListener.class, listener);
   }
   
   public void fireCounterIncreased(Object source, Long newValue)
   {
      CounterEvent event = new CounterEvent(source, newValue);
      for(CounterListener listener : listenerList.getListeners(CounterListener.class))
      {
         listener.counterIncreased(event);
      }
   }
   
   public void fireCounterDecreased(Object source, Long newValue)
   {
      CounterEvent event = new CounterEvent(source, newValue);
      for(CounterListener listener : listenerList.getListeners(CounterListener.class))
      {
         listener.counterDecreased(event);
      }
   }
}
Verwendung
Code:
public class Counter
{
   private CounterListenerSupport listenerSupport = new CounterListenerSupport();
   private Long counter;
   
   public Counter()
   {
   }
   
   public void addCounterListener(CounterListener listener)
   {
      listenerSupport.addCounterListener(listener);         
   }
   
   public void removeCounterListener(CounterListener listener)
   {
      listenerSupport.addCounterListener(listener);         
   }
   
   public void increase()
   {
      counter += 1L;
      listenerSupport.fireCounterIncreased(this, counter);
   }
   
   public void decrease()
   {
      counter -= 1L;
      listenerSupport.fireCounterDecreased(this, counter);
   }

   public static void main(String[] args)
   {
      Counter counter = new Counter();
      
      // Mit CounterAdapter muss man nicht alle Methoden des Interface CounterListener implementieren
      counter.addCounterListener(
            new CounterAdapter()
            {
               public void counterIncreased(CounterEvent event)
               {
                  System.out.println(String.format("CounterAdapter#counterIncreased %d", event.getValue()));
               }
            }
      );

      // Mit CounterListener müssen beide Methoden implementiert werden
      counter.addCounterListener(
            new CounterListener()
            {
               public void counterIncreased(CounterEvent event)
               {
                  System.out.println(String.format("CounterListener#counterIncreased %d", event.getValue()));
               }
               public void counterDecreased(CounterEvent event)
               {
                  System.out.println(String.format("CounterListener#counterDecreased %d", event.getValue()));
               }
            }
      );
      
      counter.increase();
      counter.increase();
      counter.decrease();
      counter.decrease();
      counter.increase();
   }

}
 
G

Guest

Gast
Hier zum Vergleich C#. Irgendwie gefällt mir die C# Variante besser. Gerade solche elementaren Funktionalitäten
wie Event-Handling sollten durch die Syntax einer Programmiersprache abgedeckt sein.

Code:
public class CounterEvent : EventArgs
{
   private long value;

   public CounterEvent(long value)
      : base()
   {
      this.value = value;
   }

   public long Value
   {
      get
      {
         return value;
      }
   }
}

public class Counter
{
   public event EventHandler<CounterEvent> Increased;
   public event EventHandler<CounterEvent> Decreased;

   private long value;

   public Counter()
   {
   }

   public static Counter operator ++(Counter counter)
   {
      counter.value++;
      if (counter.Increased != null)
      {
         counter.Increased(counter, new CounterEvent(counter.value));
      }
      return counter;
   }

   public static Counter operator --(Counter counter)
   {
      counter.value--;
      if (counter.Decreased != null)
      {
         counter.Decreased(counter, new CounterEvent(counter.value));
      }
      return counter;
   }
}



// Dann die Verwendung

Counter counter = new Counter();
counter.Increased += new EventHandler<CounterEvent>(CounterIncreased);
counter.Decreased += new EventHandler<CounterEvent>(CounterDecreased);

counter++;
counter++;
counter--;


void CounterIncreased(object sender, CounterEvent counterEvent)
{
   Console.WriteLine(string.Format("CounterIncreased: {0}", counterEvent.Value ));
}

void CounterDecreased(object sender, CounterEvent counterEvent)
{
   Console.WriteLine(string.Format("CounterDecreased: {0}", counterEvent.Value ));
}
 
G

Guest

Gast
Kleiner Korrektur zum CounterListenerSupport (unnötige Erzeugung von Events vermeiden)
Code:
     public void fireCounterIncreased(Object source, Long newValue)
      {
         if (listenerList.getListenerCount() > 0)
         {
            CounterEvent event = new CounterEvent(source, newValue);
            for (CounterListener listener : listenerList.getListeners(CounterListener.class))
            {
               listener.counterIncreased(event);
            }
         }
      }

      public void fireCounterDecreased(Object source, Long newValue)
      {
         if (listenerList.getListenerCount() > 0)
         {
            CounterEvent event = new CounterEvent(source, newValue);
            for (CounterListener listener : listenerList.getListeners(CounterListener.class))
            {
               listener.counterDecreased(event);
            }
         }
      }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Ical4j - Lazy Loading von Events? Java Basics - Anfänger-Themen 2
D Events verarbeiten Java Basics - Anfänger-Themen 1
nonickatall Erste Schritte Events Dokumentation/Tutorial Java Basics - Anfänger-Themen 1
K die Source eines Events bei verschiedenen Quellen herausfinden Java Basics - Anfänger-Themen 1
M Best Practice Events für jeden, oder für die Allgemeinheit "registrieren"? Java Basics - Anfänger-Themen 5
O Wie Log4J - Ausgaben/Events auffangen?! Java Basics - Anfänger-Themen 3
Thallius Best Practice Events zwischen eigenen Klassen Java Basics - Anfänger-Themen 2
G Events schreiben, solange Programm läuft Java Basics - Anfänger-Themen 6
H [JAVA] NetBeans GUI Builder - Events Java Basics - Anfänger-Themen 10
G Erste Schritte Window Events in Java Java Basics - Anfänger-Themen 6
Y Events auslösen Java Basics - Anfänger-Themen 11
T fenster schliesen und mouse events in einer nicht abstrakten klasse Java Basics - Anfänger-Themen 6
S Dauer eines Events anhandUnterschied berechnen? Java Basics - Anfänger-Themen 3
Nicer Maus Events Java Basics - Anfänger-Themen 2
H Listener und Events entfernen Java Basics - Anfänger-Themen 2
R wieso Nullpoint und was mit Events ? Java Basics - Anfänger-Themen 14
F Reihenfolge in der Events abgearbeitet werden Java Basics - Anfänger-Themen 2
Luk10 Problem mit vielen Timer(-Events) Java Basics - Anfänger-Themen 17
B Events behandeln Java Basics - Anfänger-Themen 4
A Events werfen/feuern wenn bestimtm methode ausgeführt wird Java Basics - Anfänger-Themen 3
E import org.eclipse.swt.Events.PaintListener; Java Basics - Anfänger-Themen 1
M Urheber von Events ermitteln Java Basics - Anfänger-Themen 5
S Eigene Events werfen? Java Basics - Anfänger-Themen 6
G Events manuell aulösen Java Basics - Anfänger-Themen 3
C Listener und Events Java Basics - Anfänger-Themen 10
D Events nicht bei den jeweiligen Objekten? Java Basics - Anfänger-Themen 3
G PropertyChangeListener empfängt Events doppelt Java Basics - Anfänger-Themen 5
F Eigene Klasse für Events Java Basics - Anfänger-Themen 10
G Events Java Basics - Anfänger-Themen 8
S Keylistener-Events hochreichen Java Basics - Anfänger-Themen 4
H Problem mit Events bzw. Referenzen Java Basics - Anfänger-Themen 4
G Loop blockt alle Events Java Basics - Anfänger-Themen 7
D Probleme mit key events Java Basics - Anfänger-Themen 6
S Events Java Basics - Anfänger-Themen 11
S MouseListener - Events auf Mouseklick Java Basics - Anfänger-Themen 14
D Events Java Basics - Anfänger-Themen 4
G Events Java Basics - Anfänger-Themen 2
E Events nicht an aufrufendes Objekt schicken Java Basics - Anfänger-Themen 23
R events . usw Java Basics - Anfänger-Themen 6
S winXP -> window-events Java Basics - Anfänger-Themen 2
D [Problem] Events Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben