Problem jest prawie nie do rozwiązania w ogólnym przypadku. Dlatego nie jest częścią rdzenia Swing.
Z technicznego punktu widzenia stan "wyłącz i przechowuj", po którym następuje "włącz i przywróć do stanu starego", może wyglądać atrakcyjnie. Nawet w szczególnych przypadkach może to być miłe. Ale są (przynajmniej pewnie jeszcze więcej) dwie kwestie z tym związane.
składniki mieszanki
rekursję musi zatrzymać się na „składnik związek” (lub „jednolita”). Następnie składnik odpowiedzialny jest za utrzymanie stanu zależności. Nie ma ogólnego sposobu na wykrycie takiego komponentu - przykłady to JComboBox, JXDatePicker (który jest powiązany z issue)
Aby uczynić rzeczy jeszcze bardziej skomplikowanymi, zależności nie muszą znajdować się w hierarchii "składnika złożonego", np. JXTable dba o stan włączonego ColumnControl (i nagłówka).
próbują rozwiązać zarówno wymagałoby mieć
a) nieruchomość na związek: „Nie dotykaj moich dzieci” i
b) nieruchomości na uncontained utrzymaniu: „Nie dotykaj mnie "
wiązania do włączona
enable-i-update-do-stary może złamać stanu aplikacji, jeśli włączona stan jest związany z prezentacją (lub inny) własności modelu i że własność zmieniło w-the- tymczasem - teraz stary stan jest nieważny.
Próba rozwiązania, które wymagają, aby mieć
c) "prawdziwy" przechowywane-old-enabled-due-to-view-obaw własności
d) powiązać właściwości modelu prezentacji zarówno włączona i przechowywana w starym stanie
JXRadioGroup ma wariant tego problemu: Po wyłączeniu - sama grupa lub kontroler ogólny - śledzi starą funkcję każdego przycisku. Włączenie przycisku jest kontrolowane przez akcję - jeśli jest Akcja. Tak więc włączony kontroler musi przywrócić starą aktywację lub włączyć działanie. Podczas wyłączania grupy (as-group) pojawia się problem, jeśli opcja Akcja została ustawiona na false i została zmieniona na true. Kolejne, jeśli czynności zostały dodane.
Teraz wyobraź sobie złożoność przejścia państwowych przy przeciążeniu a) - d)
dobrą alternatywą. +1 – VonC
Jest to jednak możliwe tylko wtedy, gdy chcesz blokować interakcje użytkownika. W rzeczywistości wszystkie wywołania programistyczne, w tym wywołania ui-robot (takie jak doClick), mogą nadal przechodzić przez odpowiednie zdarzenia. – Defd