🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #27033

Re: Gestion de Eventos

#27033
From: Jonathan Revusky
Date: Thu, 05 Nov 1998 00:00
96 lines
4185 bytes
Federico wrote:
> 
> Para mi gusto es m�s f�cil gestionar los eventos como lo hace el JBuilder
> (por lo menos en muchos de los casos). Consiste en crear nuevas clases que
> heredan de clases adapatdoras ("adapters"), las cuales ya implementan los
> Listeners correspondientes (p.e. a MouseListener le corresponde
> MouseAdapter), con lo que no tenemos que reescribir todos los pre-m�todos
> del Listener (ya est�n escritos en el adaptador) y adem�s conseguimmos que
> la clase correspondiente a la ventana tenga un c�digo m�s claro y elegante
> (seg�n mi gusto). Para que estas clases que extienden a las clases
> adaptadoras reciban los eventos, hay que registrarlas como Listeners de los
> mismos. Adem�s, para que puedan llamar a m�todos de la clase ventana, hemos
> de mandar al constructor del adaptador una referencia de dicha clase. Al
> pricipio parece complejo, pero, en mi opini�n clarifica mucho el c�digo.
> P.e.:
>     public class Ventana extends Frame / Applet / o lo que sea
>     {
>         Button b1 = new Button();
>         Button b2 = new Button();
>         Button b3 = new Button();
>         .........
>         .........
>         b1.addActionListener(new B1ActionAdapter(this));
>         b2.addActionListener(new B2ActionAdapter(this));
>         ........
> 
>         public void hacerCuandoB1pulsado(ActionEvent e)
>         {    .................    }
>     }
> 
>     class B1ActionAdapter extends ActionAdapter
>     {
>         Ventana adaptador;
> 
>         public  B1ActionAdapter (Ventana v)
>         {    adaptador = v;    }
>         public ActionPerformed(ActionEvent e)
>         {
>             adaptador.hacerCuandoB1Pulsado(e);
>         }
>     }

Federico, supongo que fue un descuido tuyo, pero no existe la clase
ActionAdapter. Existe KeyAdapter y WindowAdapter entre otros, pero
ActionAdapter no existe porque la interfaz ActionListener s�lo tiene un
m�todo de todas formas.

En todo caso, no entiendo el inter�s del ejemplo. No necesitas pasar una
referencia a la ventana al ActionListener. Te explicar� porqu�.

/**
 * m�todo de utilidad que devuelve la ventana en que vive un Component.
 */

public static Window getWindow(Component c) {
   while (!(c instanceof Window)) {
      c = getParent(c);
      if (c==null) break;
   }
   return c;
}

El m�todo aqu� arriba recupera la ventana en que vive un Component.

Y entonces en alg�n otro lugar:

miButton.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
      Window w = getWindow((Component) e.getSource());
      if (w instanceof MiVentana) {
        MiVentana v = (MiVentana) w;
      //  etcetera.
      }
   }
});

Siempre puedes obtener una referencia a la ventana en que vive el Button
o lo que sea en todo caso. No necesitas una clase especial
B1ActionAdapter para hacer eso. �Ves? Supongo que JBuilder genera c�digo
as� pero no lo veo como un esquema especialmente bueno. Muy malo
tampoco. Regular quiz�...
      
> Bueno, despu�s de explayarme de esta forma, que cada uno decida. Yo digo que
> es m�s elegante y claro, y m�s "orientado-a-objetos", pero estoy abierto a
> otras opiniones.

M�s "orientado a objetos" quiere decir "mejor", �no? 

Quiz�. Pero muy francamente, a�n no veo lo que ofrece ese enfoque.

Jonathan Revusky
-- 
Java and Delphi Consulting
Make your .class files double-clickable
with SmartJ
http://www.bigfoot.com/~crystalline.solutions
Technical Details
Message-ID: <3640F389.E13F78B7@jet.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <71a8ol$17p@lilith.uab.es> <3638CA15.D59C91EA@jet.es> <71q7c9$gra$1@talia.mad.ibernet.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,a8db118818ebd858
X-Google-Attributes: gid1116f3,public
From: Jonathan Revusky <jrevusky@jet.es>
Subject: Re: Gestion de Eventos
Date: 1998/11/05
Message-ID: <3640F389.E13F78B7@jet.es>
X-Deja-AN: 408494301
Content-Transfer-Encoding: 8bit
References: <71a8ol$17p@lilith.uab.es> <3638CA15.D59C91EA@jet.es> <71q7c9$gra$1@talia.mad.ibernet.es>
X-Accept-Language: en
Content-Type: text/plain; charset=iso-8859-1
Organization: Telefonica Transmision de Datos
Mime-Version: 1.0
Reply-To: jrevusky@bigfoot.com
Newsgroups: es.comp.lenguajes.java