Article View: es.comp.lenguajes.java
Article #27033Re: Gestion de Eventos
From: Jonathan Revusky
Date: Thu, 05 Nov 1998 00:00
Date: Thu, 05 Nov 1998 00:00
96 lines
4185 bytes
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-mailReferences:
<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