I understand your question, and as others have suggested, iterating through all the actions listeners from the client class may solve your immediate problem.
H/w in this case, what you are really trying to do is extend the functionality of a JButton, and that is one way to tackle this problem - extend JButton and add a method called removeAllActionListeners()
(which does not take any parameters).
- Inside this method you can iterate
through all action listeners and
remove them. I think it is better
design if you do this here than in
the client class.
If you don't want to do that, then I think Tom Hawtin's suggestion to use state within your ButtonListener is a good idea.
Failing which, you always have the option of falling back on a very "hacky" way, which is to store a collection of the action listeners in your client class.
Map<JButton, ButtonListener>
(if there's always only going to be one listener per button), or
Map<JButton, List<ButtonListener>>
(if there can be multiple listeners per button) is what I might use.
I think methods 1 and 2 are preferable, and method 3 indicates poor design (but is much easier to hack together).
Note that, if you do indeed use method 1, or something similar, check that the methods or attributes you are accessing are thread safe (as mentioned by OscarRyz), and if not, use synchronized
to ensure thread safety.