Entiendo su pregunta, y como otros han sugerido, iterar a través de todas las acciones que los oyentes de la clase de cliente pueden resolver su problema inmediato.
H/W en este caso, lo que realmente están tratando de hacer es extender la funcionalidad de un JButton, y que es una manera de abordar este problema - extender JButton y añadir un método llamado removeAllActionListeners()
(que hace no tomar ningún parámetro).
- Dentro de este método se puede repetir través de todos los oyentes de acción y eliminarlos. Creo que es mejor diseño si haces esto aquí que en la clase de cliente.
Si no quiere hacer eso, entonces creo que la sugerencia de Tom Hawtin para usar el estado dentro de su ButtonListener es una buena idea.
En su defecto, siempre tiene la opción de volver a caer de una manera muy "hacky", que es almacenar una colección de los oyentes de acción en su clase de cliente.
Map<JButton, ButtonListener>
(si siempre hay solamente va a ser un oyente por botón), o
Map<JButton, List<ButtonListener>>
(si es que puede haber múltiples oyentes por botón) es lo que podría utilizar.
Creo métodos y son preferibles, y el método indica un mal diseño (pero es mucho más fácil de hackear juntos).
Tenga en cuenta que, si de hecho utiliza el método , o algo similar, compruebe que los métodos o atributos de los que se accede son seguros para subprocesos (como se ha mencionado por OscarRyz), y si no, utilizar synchronized
para garantizar la seguridad de hilo .
(Solo tenga en cuenta que probablemente esta no sea una forma efectiva de diseñar lo que sea que intente hacer. Mejor dejar a los oyentes allí disparando, y tener algún control/polimorfismo después de eso para desactivar la acción (probablemente cambie de estado en lugar de deshabilitar).) –