Rozumiem twoje pytanie, a jak sugerowali inni, powtarzanie przez wszystkie działania słuchaczy z klasy klienta może rozwiązać twój natychmiastowy problem.
H/W w tym przypadku, co się naprawdę staramy się robić to rozszerzyć funkcjonalność JButton, a to jest jeden sposób, aby rozwiązać ten problem - rozszerzenie JButton i dodać metodę zwaną removeAllActionListeners()
(co robi nie przyjmować żadnych parametrów).
- Wewnątrz tej metodzie można iteracyjne przez wszystkich słuchaczy działania i je usunąć. Myślę, że jest lepiej projektowania, jeśli robisz to tutaj niż w klasy klienta.
Jeśli nie chcesz tego robić, to myślę, że sugestia Toma Hawtina, aby użyć stanu w swoim ButtonListener jest dobrym pomysłem.
W przypadku braku opcji zawsze można powrócić na bardzo "hacky", czyli przechowywać kolekcję detektorów działań w klasie klienta.
Map<JButton, ButtonListener>
(jeśli istnieje zawsze tylko będzie jeden słuchacz na przycisku), lub
Map<JButton, List<ButtonListener>>
(jeśli nie może być wielu słuchaczy na przycisku) jest to, co mógłbym użyć.
myślę metody i są korzystne i sposób oznacza niską konstrukcję (ale jest o wiele łatwiejsze do włamania razem).
zauważyć, że jeśli rzeczywiście używać metoda , lub coś podobnego, sprawdź, że metody i atrybuty uzyskiwania dostępu są bezpieczne (jak wspomniano przez OscarRyz) nici, a jeśli nie, użyj synchronized
celu zapewnienia bezpieczeństwa wątku .
(Tylko uwaga, że to prawdopodobnie nie jest skuteczny sposób zaprojektowania tego, co próbujesz zrobić.) Lepiej zostawić słuchaczy tam strzelających, a następnie sprawdź/polimorfizm po tym, aby wyłączyć akcję (prawdopodobnie zmienić stan zamiast disable).) –