AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [Java] Ereignisse auslösen und auf selbige reagieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Java] Ereignisse auslösen und auf selbige reagieren

Ein Thema von Luckie · begonnen am 19. Sep 2008 · letzter Beitrag vom 25. Sep 2008
Antwort Antwort
Seite 2 von 4     12 34      
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#11

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 19. Sep 2008, 10:10
Hallo,

ich habe neulich meine eigene Implementierung geschrieben. Dieser kann man einen Methodennamen übergeben (ähnlich wie in Actionscript). Die Standardereignisse sind nämlich in Java ein ziemlicher Mist. Ich kann am Montag mal fragen, ob Du den haben kannst (wenn Du willst). Dann hätte ich auch endlich einen Grund, das Ganze zu dokumentieren .

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#12

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 19. Sep 2008, 10:25
Bevor ich was eigenes implementiere, wollte eigentlich erstmal den üblichen Java Wg implementieren.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von memphis
memphis

Registriert seit: 4. Apr 2003
Ort: Innsbruck
89 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 19. Sep 2008, 20:26
Hallo,

ich würde es mit dem Observer-Pattern lösen (Die EventListener bzw. ActionListener sind im Grunde genau das selbe, nur eben speziell an Swing/AWT Komponenten angepasst).

Als erstes definierst du dir ein Interface (den sogenannten Listener), welches deine Ereignisse beinhaltet:

Code:
interface KundeListener{
    public void onAddKonto(Kunde source); //event. auch eine eigene Klasse KundeEvent als Parameter
    (...)
}

Deine Klasse Kunde ergänzt du um zwei Methoden, welches es dir erlauben einen KundeListener zu registrieren bzw. zu entfernen:

Code:
class Kunde{

(...)

       private Vector<KundeListener> listeners = new Vector<KundeListener>();

   public void addKundeListener(KundeListener listener) {
      listeners.add(listener);
   }

   public void removeKundeListener(KundeListener listener) {
      listeners.remove(listener);
   }

        //alle registrierten Listener benachrichtigen
   private void fireAddKontoEvent() {
      Iterator<KundeListener > iter = listeners.iterator();
      while (iter.hasNext()) {
         ((KundeListener ) iter.next()).onAddKonto(this);
      }
   }

}
Bei deiner AddKonto Methode löst du das Event aus, in dem du alle registrierten Listener benachrichtigst:

Code:
   /*
    * Konto dem Kunden hinzufügen  
    */   
   public void addKonto(Konto konto)
   {
      _konten.add(konto);
      fireAddKontoEvent();
   }
Damit hast du eigentlich schon das Observer-Pattern implementiert. Nun ist es möglich, einen eigenen KundeListener zu implementieren und zu registrieren.

Code:

public class testKunde implements KundeListener

    public void main(String args[]){
         Kunde kunde = new Kunde();
         kunde.addKundeListener(this);
         kunde.addKonto(new Konto());
    }

   public void onAddKonto(Kunde source){
         System.out.println("Neus Konto zu Kunde " + source.getName() + " hinzugefügt..");
   }

}

Der Quellcode ist nicht getestet, dürfte aber vom Prinzip her stimmen (ich hoffe deine Java-Kenntnisse reichen aus..).
Wenn du willst, kann ich dir nach dem Wochenende auch ein komplettes Beispiel hochladen.


Schönen Abend,
lukas.
Lukas
Wenn du nicht mehr weiter weißt, zeichne dir 'nen Einheitskreis.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 19. Sep 2008, 21:50
Genau das war es, was ich gesucht habe. Besten Dank.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 25. Sep 2008, 09:59
So, habe endlich mal Zeit gefunden da weiter zu machen.

Code:
/*
 * Interface des Ereignisses
 */ 
interface KundeListener{
    public void onAddKonto(Kunde source);
}

public class Kunde
{
   private String _name;
   private String _vorname;
   private ArrayList _konten;
   // Array für die Ereigniss Registrierungen
   private Vector<KundeListener> listeners = new Vector<KundeListener>();
Jetzt kommt leider die Fehlermeldung:
Zitat:
Der Typ "Vector<KundeListener>" kann nicht gefunden werden.
Michael
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#16

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 25. Sep 2008, 10:10
versuch mal

Code:
private Vector<KundeListener> listeners = new Vector()<KundeListener>;
also am ende einfach () vor das <>

Edit:Ich glaub das <> am ende braucht man garnicht, das reicht glaub beim ersten
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 25. Sep 2008, 10:15
Wenn ich die Klammern nach vorne ziehe, meckert er über das Semikolon am Ende der Zeile. Er unterkringelt mir auch das erste Vektor. Aber import java.util.Vector; habe ich im Quellcode drin.
Michael
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#18

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 25. Sep 2008, 10:23
Hallo,

Du musst java.util.Vector einbinden. Und vergiss das mit den Klammern, Dein Code ist schon richtig.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#19

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 25. Sep 2008, 10:33
Zitat von Angel4585:
Edit:Ich glaub das <> am ende braucht man garnicht, das reicht glaub beim ersten
Und funzt das?

Ums dir mal in Delphi zu erklären:
Du Deklarierst einen zeiger der auf ein TBeispielrecord zeigt.
Du musst aber einfach nur einen einfachen Zeiger erzeugen.

Also einfach
Code:
private Vector<KundeListener> listeners = new Vector();
Edit: @Luckie: Was für eine IDE verwendest du eigentlich? Ich kann nur NetBeans empfehlen ist auch für den Umstieg von der Delphi IDE angeblich am besten
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#20

Re: [Java] Ereignisse auslösen und auf selbige reagieren

  Alt 25. Sep 2008, 10:39
Zitat von xaromz:
Du musst java.util.Vector einbinden.
Habe ich.

Zitat:
Und vergiss das mit den Klammern, Dein Code ist schon richtig.
Welcher? Mein ursprünglicher?

Trotzdem meckert er über das erste Vector<KundeListener>, dass er den Typ nicht finden kann. Er scheint das Interface gar nicht zu sehen, was aber in der gleichen datei vor der Klasse definiert ist:
Code:
import java.util.Vector;

/*
 * Interface des Ereignisses
 */ 
interface KundeListener{
    public void onAddKonto(Kunde source);
}

public class Kunde
{
   private String _name;
   private String _vorname;
   private ArrayList _konten;
   // Array für die Ereigniss Registrierungen
   private Vector<KundeListener> listeners = new Vector();
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz