Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > ¿Crear evento en un JComponent?

Muy buenas, estaba comenzando con Swing y quería crear un componente propio que enviara un evento y lo escuchase la pantalla que lo contiene y ejecutar una acción.

El caso es que tengo en el componente dos botones y quiero que cuando se pulsen envíen un evento propio, la pantalla que lo contiene lo escuche.

En otros lenguajes haría un dispatchEvent(String, Object) y en la pantalla un addEventListener, pero no consigo encontrar un equivalente.

Alguna idea?? Muchas gracias

agosto 21, 2013 | Registered Commentersaitoh

En vez de adivinar el problema que tienes, sería muy útil que creases un ejecutable de tipo SSCCE (http://sscce.org/), y lo publicases aquí.
Tal vez el componente ya existe, o se puede extender de uno existente.
Normalmente ese tipo de problemas se resuelve usando un PropertyChangeListener; pero sin conocer más detalles...

agosto 22, 2013 | Registered Commenterchoces

He creado un componente que contiene varios labels y botones, y quería que cuando se presionará cada botón enviara un evento distinto.

Al final he creado una interfaz que implemento en el oyente, y al hijo le he creado una lista con listeners a los que se subscribe el padre y cuando lanza el evento llama a las funciones de la interfaz de todos los que estén escuchando.

Como ves la solución?

agosto 24, 2013 | Unregistered Commentersaitoh

Aquí tienes un ejemplo SSCCE.

public class Test extends javax.swing.JFrame {

public Test() {
initComponents();

jButton1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jPanel1.firePropertyChange("boton1", false, true);
}
});
jButton2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jPanel1.firePropertyChange("boton2", false, true);
}
});
jButton3.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jPanel1.firePropertyChange("boton3", false, true);
}
});
jPanel1.addPropertyChangeListener("boton1", new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("Soy el botón 1");
}
});
jPanel1.addPropertyChangeListener("boton2", new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("Soy el botón 2");
}
});
jPanel1.addPropertyChangeListener("boton3", new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
System.out.println("Soy el botón 3");
}
});
}

@SuppressWarnings("unchecked")

private void initComponents() {

jPanel1 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jButton1.setText("jButton1");
jPanel1.add(jButton1);

jButton2.setText("jButton2");
jPanel1.add(jButton2);

jButton3.setText("jButton3");
jPanel1.add(jButton3);

getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

pack();
}

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Test().setVisible(true);
}
});
}

private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JPanel jPanel1;

}

agosto 24, 2013 | Registered Commenterchoces