Foro sobre Java EE > ¿Crear evento en un JComponent?
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...
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?
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;
}
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