Pregunta

He hecho un arsenal completo de JLabels y me gustaría añadir un oyente a ellos.

El oyente no necesita saber exactamente lo que uno se ha hecho clic, era sólo eso. ¿Hay una manera de añadir al oyente a toda la matriz en lugar de utilizar un 'para) (' bucle?

Gracias por la lectura.

¿Fue útil?

Solución

Si se añaden las etiquetas a un contenedor (como un JPanel) se puede añadir un oyente a este contenedor y saber qué componente es en cierto lugar.

JPanel panel = new JPanel();
panel.addMouseListener( whichOneListener );
f.setContentPane( panel );

En este caso utilizo un MouseListener porque eso me da la ubicación donde el usuario ha hecho clic.

private static MouseListener whichOneListener = new MouseAdapter() {
    public void mouseClicked( MouseEvent e ) {
        JComponent c = ( JComponent ) e.getSource();
        JLabel l  = ( JLabel ) c.getComponentAt( e.getPoint() );
        System.out.println( l.getText() );
    }

};

Y se imprime correctamente qué componente se ha hecho clic.

El código fuente completo es aquí

Otros consejos

No hay ninguna fuera de la solución de caja, que yo sepa. Aparte de usar hacks estúpidos, creo que puede que tenga que utilizar un bucle, y puede ser un código de 10 líneas, nada de que preocuparse.

Se puede envolver su gama de JLabels en una clase e implementar su propio método Add () que registra el oyente sobre la adición de ellos.

De esta manera usted no tiene que iterar sobre ellos después ..

Puede registrar el detector en el JPanel (o cualquier componente de los botones están en) por lo que sólo tiene que escribir un solo oyente.

Si se trata de una lista de JLabels, me gustaría sugerir el uso de CollectionUtils.forAllDo -. método que le permite aplicar una misma acción a un montón de objetos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top