Я понимаю ваш вопрос, и, как предлагали другие, итерация всех действий слушателей из клиентского класса может решить вашу непосредственную проблему.
H / w в этом случае, чтовы действительно пытаетесь сделать это расширить функциональность JButton, и это один из способов решения этой проблемы - расширить JButton и добавить метод с именем removeAllActionListeners()
(который не принимает никаких параметров).
- Внутри этого метода вы можете перебирать всех слушателей действий и удалять их.Я думаю, что лучше сделать это, если вы сделаете это здесь, чем в классе клиента.
Если вы не хотите этого делать, то я думаю, что предложение Тома Хотина использоватьхорошая идея в вашем ButtonListener.
В противном случае у вас всегда есть возможность вернуться к «хакерскому» способу - сохранить коллекцию слушателей действий.в вашем клиентском классе.
Map<JButton, ButtonListener>
(если всегда будет только один слушатель на кнопку), или Map<JButton, List<ButtonListener>>
(если может быть несколько слушателей на кнопку) это то, что я мог бы использовать.
Я думаю, что методы 1 и 2 предпочтительнее, а метод 3 указывает на плохой дизайн (но гораздо проще взломать вместе).
Обратите внимание, что, если вы действительно используете метод 1 или что-то подобное, проверьте, что методы или атрибуты являютсядоступ является потокобезопасным (как упомянуто OscarRyz), и если нет, используйте synchronized
, чтобы обеспечитьfety.