—De momento tengo bastante bien definida la parte estática del componente, sus propiedades y atributos y los métodos que me sirven para poder gestionarlos, pero en realidad mis componentes no hacen nada aún...
Juan tiene razón, la funcionalidad de un componente viene definida por las acciones que puede realizar definidas en sus métodos y no solo eso, también se puede programar un componente para que reaccione ante determinadas acciones del usuario, como un clic del ratón o la pulsación de una tecla del teclado. Cuando estas acciones se producen, se genera un evento que el componente puede capturar y procesar ejecutando alguna función. Pero no solo eso, un componente puede también lanzar un evento cuando sea necesario y que su tratamiento se realice en otro objeto.
Los eventos que lanza un componente, se reconocen en las herramientas de desarrollo y se pueden usar para programar la realización de acciones.
Para que el componente pueda reconocer el evento y responder ante el tendrás que hacer lo siguiente:
Crear una clase para los eventos que se lancen.
Definir una interfaz que represente el oyente (listener) asociado al evento. Debe incluir una operación para el procesamiento del evento.
Definir dos operaciones, para añadir y eliminar oyentes. Si queremos tener más de un oyente para el evento tendremos que almacenar internamente estos oyentes en una estructura de datos como ArrayListo LinkedList:
public void add<Nombre>Listener(<Nombre>Listener l)
public void remove<Nombre>Listener(<Nombre>Listener l)
Finalmente, recorrer la estructura de datos interna llamando a la operación de procesamiento del evento de todos los oyentes registrados.