Event erstellen

Guten Abend,

Ich hbae folgendes Problehm. Ich möchte ein Event schreiben. Klingt gut und wurde bestimmt schon tausend mal angesprochen oder so? Aber das was ich gefunden habe ist nicht das was ich suche. Ich versuche es mal zu erklären:

Ein JButton kann mit addActionListener einem ActionLIstener zugeführt werden.
Der JButton kann dann auf das Ereignies reagieren wenn man mi der Maus druacf clickt oder die doClick Action ausführt.

So was in der Art versuche ich in einer Klasse einzu binden die Kein JFrame ist. Die Klasse Simuliert einen Dienst mit start und stop methode und so weiter. Nun sol ldie Klasse beim Starten das onStart ereignies ausführen.
Nur wie bekomme ich das hin? Das ist was ich bis her nicht verstehe. Die bisherigen Tutorials haben mir gezeigt wie ich zum Beispiel einen JButton einen ActionListner übergebe und dann ein Ereignies ausführe. Ich hoffe ich war verständlich? Bin mir da nie so sicher. Es wäre sehr nett wenn mir jemand dabei helfen könnte muss.

Vielen Dank schon mal im vorraus

Mit freundlichen Grüßen

Tommy135
 
Ich hoffe ich war verständlich?
Nein, leider nicht. :) Versuche vielleicht einfach mal, ein bisschen Code zu zeigen und dann zu beschreiben, wann welche Methode durch welches Ereignis aufgerufen werden soll und was die Methode dann tun soll. Code ist meist besser als sehr lange, umschweifende und um-den-heißen-Brei-herum Prosabeschreibungen.
 
Ein bischen Code ist schwirich da es eine ganze Klasse ist. Ich poste die mal hier:
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package de.tc.cat.the.system;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.event.EventListenerList;

/**
* Creates a virtual service.
*@version 1.0
* @since  1.8
* @author Christian Trostmann
*/
public class Service {
    //Repräsentiert den Namen des Dienstes
    private final String name;
    //Gibt an ob der Dienst gestartet ist (Start) oder gestopt (Stop)
    //Ist wird von einem Enum abgeleitet.
    //Soll darauf regarien
    private String status;
    private String option;
    private final EventListenerList ell = new EventListenerList();
   
    /**
     * Creates the service.
     * @param sname Specifies the name of the service.
     * @param sstatus Indicates the status of the service, whether it is enabled or disabled.
     * @param soption Specifies the option of the service whether it is running or stopped.
     */
    public Service(String sname, Status sstatus, Option soption)
    {
        name = sname;
        status = sstatus.name();
        option = soption.name();
    }
   
    /**
     * Issues the option that the service has.
     * @return Return the option of service as a string.
     */
    public String getOption()
    {
        return option;
    }
   
    /**
     * Get the status.
     * @return Returns the status as a string.
     */
    public String getStatus()
    {
        return status;
    }
   
    /**
     * Get the name.
     * @return Returns the name as a string.
     */
    public String getName()
    {
        return name;
    }
   
    /**
     * Get out if the service is enabled.
     * @return Returns the status as a Boolean.
     */
    public boolean isAktiv()
    {
        return "Aktiviert".equals(status);
    }
   
    /**
     * Get out if the service is running.
     * @return Returns the status of the service as a Boolean.
     */
    public boolean isRunning()
    {
        return "Run".equals(option);
    }
   
    /**
     * Changes the status of the service to Enabled or disabled.
     * @param sstatus Specifies the states to which the service can take turns on or off.
     */
    public void setStatus(Status sstatus)
    {
        status = sstatus.name();
    }
   
    /**
     * Changes the option for the service to stop or run.
     * @param soption Specifies the states to which the service can take run or stop.
     */
    public void setOption(Option soption)
    {
        option = soption.name();
    }
    //Hier wird die klasse dem Listener übergeben
    public void addActionListener(ActionListener l)
    {
        ell.add(ActionListener.class, l);
    }
    //Hier wird die klasse dem Listener entfernt
    public void removeActionListener(ActionListener l) {
        ell.remove(ActionListener.class, l);
    }
   
    //Hier das beispiel was ich möchte:
    public void onStart(parameter)
    {
        //Code für das Event das durch den Benutzer angeben wird
    }
   
   
}
Ziel ist es das wenn der benutzer durch die setStatus Methode das Ereignies auslöst, dies soll dann wie beim JButton das onClick event ausgelöst werden.
 
Zuletzt bearbeitet:
Ich glaube ich habe grade die lösung in einem Post gefunden. Ich sollte echt lernen besser zu suchen. Ich hoffe das Funktioniert so wie es mir vorstelle. Danke für die Hilfe.
 
Ich vermute, du meinst etwa sowas:

Java:
interface OnStartListener {
    void onStart(/*parameter*/)
}

class Service {
    List<OnStartListener> onStartListeners = new ArrayList<>();
    public void addOnStartListener(OnStartListener listener) {
        onStartListeners.add(listener);
    }
    
    public void setStatus(Status sstatus)
    {
        status = sstatus.name();
        onStartListeners.forEach(listener -> listener.onStart);
    }

}
(Code muss natürlich noch ergänzt und verbessert werden, aber das Konzept sollte klar werden)
 
Ja so was meine ich und das der End benutzer dann auf das Event regaiert, halt wie bei einem JButton das onClick ereignies. Das ganze kann ich dan mit dem selben Interface nur etwas abgeändert auch für andere Ereigniese nutzen oder muss ich da immer ein Neues Interface setzen?
 
Ja, man kann sich dann am Service registrieren:

Java:
service.addOnStartListener(new OnStartListener() {
    public void onStart() {
         System.out.println("Service started");
    }
});
 
Cool Vielen Dank, das hat mir sehr geholfen und ist wesentich einfacher als was ich bisher gefunden hatte.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben