Java - Panel que genere eventos

 
Vista:

Panel que genere eventos

Publicado por Leo (12 intervenciones) el 20/04/2006 00:32:38
Hola!

He estado leyendo sobre eventos, y estoy manejando ActionListener y KeyListener, y me funcionan muy bien, pero ahora me gustaria saber si es posible que mi panel disparará un evento algo asi como el fireActionPerformed del JTextField o el doClick del JButton, para que un ActionListener que tengo en otra clase lo escuche.

Me gustaria q me dijeran exactamente donde buscar, por que he leido las clases: ActionEvent, AbstractEvent, necesito orientacion por fa !!!!!!.

Atte: Leo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Panel que genere eventos

Publicado por manru (161 intervenciones) el 20/04/2006 02:09:31
Hola...

Si quieres recibir el evento en el ActionListener que ya tienes en otra clase debes pasar ese action listener al objeto que genera el evento. No es muy complicado.

Espero te sirva. cualquier cosa vuelve a postear.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Panel que genere eventos

Publicado por Leo (12 intervenciones) el 20/04/2006 04:20:00
Hola!

Bueno voy a poner algo de codigo para explicarme mejor.
Para manejar los eventos yo comunmente hago esto:

class JMiPanel extends JPanel implements ActionListener{

JButton boton;
// Y otros componentes cualquiera ....

public JMiPanel() {
boton.addActionListener(this);
}

public void actionPerformed(ActionEvent ae) {
if(ae.getSource == boton) {
// Lo que quiera hacer..........
}
}

// Para que la otra clase pueda escuchar al boton hago el método
public addActionListener(ActionListener al) {
boton.addActionListener(al);
}
}

class X implements ActionListener {

JMiPanel mi_panel;

public JMiPanel() {
mi_panel.addActionListener(this); // Y entonces escucho al boton.
}

public void actionPerformed(ActionEvent ae) {

// --------Y AQUI ES DONDE ESTA MI CONFLICTO -------------
// por que entonces el que produce el evento es el boton y yo solo
// tengo acceso al panel :(

if(ae.getSource == panel) {
// No funciona..........
}

}
}

Bueno esta es la manera en la que estoy acostumbrada a escribirlos, entonces se me ocurrio que haciendo que al escuchar la boton en el Panel este a su vez produjera un evento, pero no se como hacerlo.

No se si haya otra solución más sencilla, claro que no sea accesando al boton.

Gracias!!!!!!!!!

Atte Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Panel que genere eventos

Publicado por manru (161 intervenciones) el 20/04/2006 14:37:57
Hola:

Bueno en realidad eso esta bien... No entiendo donde esta el problema
if(ae.getSource == panel) {

el ae.getSource te esta diciendo que objeto produjo el evento...
entonces si quieres saber si fue un boton has algo por el estilo

Object obj = ae.getSource();
if(obj instanceof Button) {
// es un boton... cual es??
Button btn = (Button) obj;
String label = btn.getLabel();
//etc
}

A ver si esto te ayuda...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Panel que genere eventos

Publicado por Leo (12 intervenciones) el 20/04/2006 20:35:13
Hola!

No, yo lo que quiero es saber si el panel produjo el evento. Este es mi código tal y como lo estoy ejecutando:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class ELOISA{

public static void main(String[] args) {
JVentana ventana = new JVentana();
ventana.setVisible(true);
}
}

class JVentana extends JFrame implements ActionListener{

private static final long serialVersionUID = 1L;
JMiPanel mi_panel = new JMiPanel();

public JVentana(){
super("Prueba");
setSize(400,300);
setVisible(true);
this.mi_panel.addActionListener(this);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().add(mi_panel);
}

public void actionPerformed(ActionEvent ae) {
// --------Y AQUI ES DONDE ESTA MI CONFLICTO -------------
//por que entonces el que produce el evento es el boton y yo solo
//tengo acceso al panel :(

if(ae.getSource() == this.mi_panel)
------------------------ESTE MENSAJE NUNCA SE MUESTRA-----------------------------------
System.out.println("Estoy escuchando un Panel");
----------------------------------------------------------------------------------------------------------------
else
System.out.println("No es un panel Es un boton");

}

}
class JMiPanel extends JPanel implements ActionListener{

private static final long serialVersionUID = 1L;
JButton boton;

public JMiPanel() {
super();
boton = new JButton("B");
this.add(boton);
boton.addActionListener(this);
}

public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == boton)
System.out.println("Estoy escuchando un Boton");
}

// Para que la otra clase pueda escuchar al boton hago el método
public void addActionListener(ActionListener al) {
boton.addActionListener(al);
}
}

Necesito saber ¿en que panel ha producido el evento? por que tengo varios que tienen varios botones con las mismas etiquetas, y el acceso a los botones es private.

Atte: Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Panel que genere eventos

Publicado por manru (161 intervenciones) el 20/04/2006 21:54:56
Cambia Button por Panel...
Ahora para saber que Panel es... bueno eso es tarea tuya

if(obj instanceof Panel) {
// es un panel... cual es??
Panel btn = (Panel) obj;
// Vas a tener que ponerle nombre para saber cual es cual.
String name = btn.getName();
//etc ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Panel que genere eventos

Publicado por Leo (12 intervenciones) el 21/04/2006 02:52:35
Hola!

Sorry por la insistencia ...

class JVentana extends JFrame implements ActionListener {

JMiPanel mi_panel = new JMiPanel();

//Constructor .......

public void actionPerformed(ActionEvent ae) {

if(ae.getSource()instanceof JMiPanel){
JMiPanel mp = ((JMiPanel)ae.getSource());
String name = mp.getName();
System.out.println("Estoy escuchando el Panel : "+name );
}
else
System.out.println("No es un panel");

}
}

pero lo he puesto de esta forma y aún sigue entrando al mensaje "No es un panel" :'(

Gracias.

Atte: Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Panel que genere eventos

Publicado por Leo (12 intervenciones) el 21/04/2006 04:28:55
Hola!

Ya lo solucioné

Agregue una instancia actionListener a la clase JMiPanel, el método addActionListener y produje un evento con ActionEvent y funciona exacto como yo quería.

Gracias.

Atte: Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar