Eigenes Event schreiben

Status
Nicht offen für weitere Antworten.

Brecher

Mitglied
Hallo,
ich habe eine Klasse welches ein zweidimensionales Array beinhaltet.
Über zwei Methoden kann man von außerhalb dieses zweidimensionale Array modifizieren.

So jetzt habe ich einen JFrame auf dem ich dieses Array grafisch ausgebe, wobei eine Dimension die Spalten angibt und die andere Dimension die Zeilen.
Entsprechend der Werte in dem Array sieht die Ausgabe verschiedent aus.


Wenn jmd. jetzt an dem Array etwas ändert, sprich wenn eine der zwei (modifizierenden) Methoden aufgerufen werden, soll in der Klasse mit dem Array ein Event ausgelöst werden.

Der JFrame soll einen Listener für dieses Event registieren und immer wenn das Event eintritt, also immer wenn etwas an dem Array geändert wurde, soll die Methode zum Zeichnen des Array erneut aufgerufen werden um die grafische Ausgabe auf dem neustem Stand zu halten.

Sollte eigentlich kein Problem sein, allerdings habe ich keine Ahnung, wie ich dieses anstellen soll.

Sucht man bei Google nach 'java + event' so bekommt man irgendwie nichts brauchbares oder bzw. nur Texte, wie ich einen Event-Listener für z.B. MouseClicked für einen Button erstelle, nirgendwo steht aber, wie ich selber, eigene Events, erstelle.

Kennt jmd. evt. ein gutes Tutorial dazu oder ein Codeschnipsel der dieses aufzeigt?
Denn so schwer kann dies doch nicht sein, oder?


Ich hoffe auf Antworten.

MFG

PS:
Eine hierachische Form möchte ich nicht machen.
Sprich dem Objekt welches das Array enthält möchte ich nicht das Objekt des JFrames, welches die Schnitstelle xyz implementiert, übergeben um dann im dem Objekt mit dem Array die Methode X der Schnittstelle xyz aufzurufen.

Sondern ich möchte im Objekt mit dem Array das Event 'ChangedData' (oder so ähnlich) auslösen und alle Objekte die sich dafür registiert haben, sollen dann das Event 'erhalten'.
 

Wildcard

Top Contributor
Ein Event ist ein Objekt. Das war's auch schon. Du weißt doch wie man Klassen erstellt, oder?
 

Brecher

Mitglied
Hallo,
@Wildcard:
Also ich komm aus der C# Welt und dort ist es mit den Events eigentlich relativ cool geregelt.

Dort definiert man Events so:

Code:
class KlasseMitEvent {
   public event EventHandler MeinEigenesEvent;
 
   private void MacheEtwas() {
       //Das Event 'MeinEigenesEvent' auslösen
       if(MeinEigenesEvent != null)
            MeinEigenesEvent(this, EventArgs.Empty);
   }
}


class KlasseWasAufEventReagiert {
   private KlasseMitEvent object = new KlasseMitEvent();
  

   public KlasseWasAufEventReagiert () {
         object.MeinEigenesEvent += new EventHandler(ZielMethodeFuersEvent);
   }
  

   private void ZielMethodeFuersEvent(object sender, EventArgs e) {
       //Immer wenn in object (KlasseMitEvent) das Event 'MeinEigenesEvent' ausgelöst wird,
       //wird diese Methode aufgerufen um das Event zu verarbeiten
   }
}

Gibt es soetwas auch in Java?

Dass ich also in einer Klasse sage, diese Klasse besitzt das Event XYZ. Dann in speziellen Methoden in der Klasse kann ich das Event auslösen.


Dann in einer anderen Klasse/Objekt instanziere ich ein Objekt von der Klasse mit dem Event und sage, immer wenn das Event XYZ ausgelöst wird, wird die und die Methode aufgerufen um das Event zu verarbeiten.


Was ich nicht möchte, ist solch ein Aufbau:
Code:
interface EinInterface{
   reagiereAufsEvent();
}

class KlasseMitEvent {
   private EinInterface zielObj;

   public void addListener(EinInterface l) {
        zielObj = l;
  }
  
   private void spezielleMethode() {
       zielObj.reagiereAufsEvent();
   }
}

class KlasseWasAufEventReagiert implements EinInterface {
   private KlasseMitEvent object;
  

   public KlasseWasAufEventReagiert () {
         object = new KlasseMitEvent();
         object.addListener(this);
   }
  

   private void reagiereAufsEvent(object sender, EventArgs e) {
       //Hier wird das Event verarbeitet
   }
}

Das Problem hierdran wäre, dass nur 1 Objekt auf das Event reagieren könnte, bzw. sich dieses immer überschreibt.
Die Lösung wäre das ganze mit einer Liste zu lösen und bei allen hinterlegten Objekten jeweils die Methode 'reagiereAufsEvent' aufzurufen.

Ich finde soetwas aber recht umständlich, dies geht doch bestimmt deutlich leichter.
Oder bietet mal wieder Java keinen Unterstützung für solch eine fundamentale Eigenschaft in der OOP und man ist selber angewiesen addEventListener und removeEventListener zu implementieren?
 

Wildcard

Top Contributor
Brecher hat gesagt.:
Oder bietet mal wieder Java keinen Unterstützung für solch eine fundamentale Eigenschaft in der OOP und man ist selber angewiesen addEventListener und removeEventListener zu implementieren?
Du hast recht interessante Vorstellungen von fundamentalen Eigenschaften...
Du hast die freie Auswahl ob du dir die erforderlichen 5 Zeilen selbst zutraust, oder ob du stattdessen ein Generatorframework wie EMF verwendest und dir gleich dein gesamtes Datenmodell inklusive Oberserver Schnittstelle automatisch erzeugen lässt.
Oder bietet C# kein derart fundamentales Framework? :wink:
 

Brecher

Mitglied
Hallo,
@Wildcard:
Und wie würden die 5 erforderlichen Zeilen aussehen?

Habs jetzt so gemacht:
Code:
class KlasseMitEvent {
   ActionListener actionListener;   
    
    public void addMeinEventListener(ActionListener listener) {
        actionListener = AWTEventMulticaster.add(actionListener, listener);
    }
    
    public void removeMeinEventListener( ActionListener listener) {
        actionListener = AWTEventMulticaster.remove(actionListener, listener);
    }

    private void spezielleMethode() {
        if(actionListener != null) 
             actionListener.actionPerformed(new ActionEvent(this, 0, ""));
    }
    
}


class KlasseWasAufEventReagiert {
   private KlasseMitEvent object = new KlasseMitEvent();
 

   public KlasseWasAufEventReagiert () {
         object = new KlasseMitEvent();
      
         object.addMeinEventListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                zielMethodeFuersEvent();
            }
        });

   } 

   private void zielMethodeFuersEvent() {
       //Diese Methode wird aufgerufen, um auf das Event zu reagieren
   }
}

Dies funktioniert soweit, stellt sich nur die Frage, ob dies die gänige Lösung ist, um eine Klasse um Events zu erweitern.

Was mich daran etwas stutzig macht, ist das ich ja auf AWT zurückgreife, bzw. ggf. 'zweckemfremde'.
 

Wildcard

Top Contributor
Wozu denn das? Du hast die richtige Vorgehensweise doch schon selbst genannt :shock:
Brecher hat gesagt.:
Das Problem hierdran wäre, dass nur 1 Objekt auf das Event reagieren könnte, bzw. sich dieses immer überschreibt.
Die Lösung wäre das ganze mit einer Liste zu lösen und bei allen hinterlegten Objekten jeweils die Methode 'reagiereAufsEvent' aufzurufen.
Du verwendest einfach eine Liste mit Listenern.
 

Brecher

Mitglied
Hallo,
ja gut danke.
Ich dachte nur, dass Java dort evt. bereits eine Methode/Funktion bereit hält, so dass ich nur noch sagen muss wie das Event heißt und wann es ausgelöst werden soll, bzw. so wie bei dem ActionListener von AWT Funktioniert.

Finds nur eben blöd, für jedes Event gleich 3 Methoden schreiben zu müssen, für add, remove und fürs Event auslösen (die dann die Liste durchläuft).
 

Jango

Gesperrter Benutzer
Event's sind in C# vom Typ delegate. In Java gibt es aber keine "Zeiger" auf Methoden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Eigenes Event beim TimeOut Java Basics - Anfänger-Themen 2
Q Eigenes Event feuern Java Basics - Anfänger-Themen 5
GilbertGrape Eigenes Event? Java Basics - Anfänger-Themen 2
S Mein erstes eigenes Projekt - Aufbau und Strukturierung Java Basics - Anfänger-Themen 6
R Eigenes Protokoll zur Übermittlung von Daten zum Webserver? Java Basics - Anfänger-Themen 4
8 Eigenes Bild in email einfügen Java Basics - Anfänger-Themen 1
G eigenes package Java Basics - Anfänger-Themen 3
Anfänger2011 Eigenes Betriebssystem Java Basics - Anfänger-Themen 6
P Eigenes Fenster erstellen Java Basics - Anfänger-Themen 5
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
P eigenes Equal mit IndexOf() Java Basics - Anfänger-Themen 5
L eigenes Steuerelement Zeitstrahl Java Basics - Anfänger-Themen 3
F Eigenes Package - Variable exportieren Java Basics - Anfänger-Themen 11
GianaSisters Methoden eigenes TableModel -> removeRow möglich machen Java Basics - Anfänger-Themen 30
C Eigenes Konsolenfenster Java Basics - Anfänger-Themen 3
D Packages verwenden und in eigenes Projekt integrieren Java Basics - Anfänger-Themen 3
B Eigenes Package Java Basics - Anfänger-Themen 6
S Eigenes Objekt temporär verändern? (Clone)? Java Basics - Anfänger-Themen 12
M Eigenes Programm Flaechenrechner Java Basics - Anfänger-Themen 8
L Eigenes List Model für Icon + String -> Speicherhungrig? Java Basics - Anfänger-Themen 8
X Eigenes Kontosystem vervollständigen Java Basics - Anfänger-Themen 11
Developer_X eigenes ImageIcon schreiben Java Basics - Anfänger-Themen 11
S Eigenes Kontextmenü Java Basics - Anfänger-Themen 3
I jar in eigenes Programm unwandeln (OSX und Win) Java Basics - Anfänger-Themen 4
R Eigenes Pair Object Java Basics - Anfänger-Themen 2
C eigenes TableModel Java Basics - Anfänger-Themen 2
data89 In Java ein eigenes Lexikon erstellen? Doch wie? Java Basics - Anfänger-Themen 5
K javadoc eigenes doclet in console starten Java Basics - Anfänger-Themen 3
M Eigenes Ellipse2D-Objekt Java Basics - Anfänger-Themen 5
G Eigenes Fenster Java Basics - Anfänger-Themen 51
N Eigenes Icon in InputDialog geht nicht! Java Basics - Anfänger-Themen 7
J Eigenes Symbol für Java Programm Java Basics - Anfänger-Themen 3
M Eigenes Seitenformat definieren Java Basics - Anfänger-Themen 2
Q Eigenes TableModel - NullPointerException Java Basics - Anfänger-Themen 6
F eigenes Package Java Basics - Anfänger-Themen 2
B Package/Klasse in ein eigenes Projekt einbinden? aber wie? Java Basics - Anfänger-Themen 6
Fiedelbambu fxml onAction event Java Basics - Anfänger-Themen 7
T FXMl Event has not a Slot Java Basics - Anfänger-Themen 1
E Methoden Action Event wird nicht vollständig ausgeführt Java Basics - Anfänger-Themen 3
Tommy135 Event erstellen Java Basics - Anfänger-Themen 7
CptK Methoden Event bei gedrückter Maustaste immer wieder ausführen Java Basics - Anfänger-Themen 1
CptK Klassen Event bei gedrückter Maus immer wieder mit Pause ausführen Java Basics - Anfänger-Themen 2
topi WindowAdapter / Listener / Event Java Basics - Anfänger-Themen 4
L Event schmeißen Java Basics - Anfänger-Themen 1
F In Eclipse Haltepunkt bei Event setzen? Java Basics - Anfänger-Themen 1
T Übungsaufgabe Event Handling Java Basics - Anfänger-Themen 0
M Action Event auf Textfield legen Java Basics - Anfänger-Themen 18
V Button/Event wird nicht ausgeführt, was tun? Java Basics - Anfänger-Themen 2
J Keyboard Event auch ohne Fokus mitbekommen Java Basics - Anfänger-Themen 2
D Java Eclipse cannot be cast to java.awt.event.ItemListener Java Basics - Anfänger-Themen 3
IngoF Welches Event kommt wann? Java Basics - Anfänger-Themen 8
A Key Event - Abfrage von 2 gedrückten Tasten Java Basics - Anfänger-Themen 6
E Event gesucht Java Basics - Anfänger-Themen 1
G Button Event Java Basics - Anfänger-Themen 6
Thallius Hidden Feature über Key Event starten Java Basics - Anfänger-Themen 4
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
F Erste Schritte Aktuelles Fenster durch Event schließen Java Basics - Anfänger-Themen 3
D Button action Event einblenden/ausblenden Java Basics - Anfänger-Themen 6
U Threadsafe Event-Handling Java Basics - Anfänger-Themen 2
C Klassen NullPointerException beim Event Handling in GUI Java Basics - Anfänger-Themen 8
P ActionListener Action Event Java Basics - Anfänger-Themen 5
J Erste Schritte import awt.* ;awt.event.*; Java Basics - Anfänger-Themen 3
T event und while-schleife Java Basics - Anfänger-Themen 26
L Null Pointer Exception bei Focus Event bei einem JTextField Java Basics - Anfänger-Themen 2
M Während event einen anderen event ausführen?? Java Basics - Anfänger-Themen 3
S Event aus anderer Klasse als Auslöser Java Basics - Anfänger-Themen 5
M Event erstellen Java Basics - Anfänger-Themen 6
B OOP Eigener Event-Listener erstellen Java Basics - Anfänger-Themen 4
D Auf Event warten Java Basics - Anfänger-Themen 4
I AWS Event Notification Service Sample ausführen... Java Basics - Anfänger-Themen 7
M JList Event Java Basics - Anfänger-Themen 5
Houly while Schleife im ActionPerformed Event Java Basics - Anfänger-Themen 8
R eigenen Event schreiben Java Basics - Anfänger-Themen 16
S Kein Event bei Click auf JComboBox Java Basics - Anfänger-Themen 4
N paint methode statt Event-Handling-Methode Java Basics - Anfänger-Themen 3
H2SO3- dreieck, bild --> maus klick event. Wie gehts? Java Basics - Anfänger-Themen 10
R Event in eigener Klasse implementieren ? Java Basics - Anfänger-Themen 8
B Applet: Event-Handling-Methode in start- bzw. paint-Methode Java Basics - Anfänger-Themen 7
D Window resize Event ? Java Basics - Anfänger-Themen 5
D Bei Event soll Instanz sich selbst löschen Java Basics - Anfänger-Themen 4
D Event mit n-Button8s) von einem Panel Java Basics - Anfänger-Themen 9
A Synchronisierung oder gibt es das onChange event? Java Basics - Anfänger-Themen 4
J Automatisch Button drücken/Event ausführen? Java Basics - Anfänger-Themen 6
G Button Action Event starten Java Basics - Anfänger-Themen 4
G Methode nicht im Event-Dispatcher-Thread starten? Java Basics - Anfänger-Themen 2
F Doppelklick-Event auf JTree Java Basics - Anfänger-Themen 5
A Wo/Wie Event Listener Java Basics - Anfänger-Themen 3
N Event auf JTabbedPane abfragen ? Java Basics - Anfänger-Themen 8
G Event Handler Java Basics - Anfänger-Themen 7
T button event Java Basics - Anfänger-Themen 3
P Raw-Key-Event Java Basics - Anfänger-Themen 4
Q ActionListener event bei JPanels Java Basics - Anfänger-Themen 5
J Event-Handling geht nicht Java Basics - Anfänger-Themen 6
G Button event problem Java Basics - Anfänger-Themen 24
D MouseLister und Identifikation des Event - Buttons Java Basics - Anfänger-Themen 4
G start-oder paint-Methode anstatt Event-Handling-Methode? Java Basics - Anfänger-Themen 3
T java.awt.event.WindowAdapter Java Basics - Anfänger-Themen 2
B Event-Actionlistener(Def) Java Basics - Anfänger-Themen 6
G GUI Event Handling Java Basics - Anfänger-Themen 5
M Event auslösen (unsinnig gestellt - ignorieren) Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben