Folgende Situation:
In einem JPanel-Conatainer (Level 1) werden weitereJPanel-Container (Level 2) verwaltet, die wiederum weitere JPanel-Komponenten (Level 3) enthalten. Der Inhalt eines Level 3 JPanels wird geändert, das ganze muss neu gezeichnet werden, wobei die Zeichnung von dem Level 1 JPanel durchgeführt werden muss (komplexe Berechnung des Layouts ...). Wie macht man das am besten?
Ich könnte die Level 1 JPanel bei dem Level 3 JPanel als ComponentListener registrieren und dann ein ComponentEvent werfen (COMPONENT_RESIZED) und die entsprechende Methode des ComponentListeners passend implementieren. Das setzt voraus, dass ich die Referenz auf en Level 1 JPanel über zwei Ebene weitergeben muss, was mir nicht so gefällt. Insbesondere deshalb, weil die JPanel-Komponenten als Views dienen, während die Daten in einer Model-Klasse verwaltet werden. Die Views sollten möglichst lokal gehalten werden. Gibt es nicht eine einfachere Variante, dies zu bewerkstelligen? Kann ich es irgendwie anders sicherstellen, dass ein vom Level 3 JPanel gefeuertes Event vom Level 1 JPanel doch empfangen wird? Gibte es irgendwo eine "allgemein bekannte" Event-Queue, in die ich das Ereignis einfügen könnte (EDT usw.)?
Es geht nicht darum, dass ich einfach repaintComponent oder so was aufrufe. Ich muss eine Methode des Level 1 JPanels aufrufen, die eine relativ komplexe Berechnung (Layout ... ) macht. Dazu muss ich irgendwie die Meldung an den Level 1 JPanel senden. Kann man das eleganter machen, als die Referenz über drei Ebene weiterzureichen?
Danke
In einem JPanel-Conatainer (Level 1) werden weitereJPanel-Container (Level 2) verwaltet, die wiederum weitere JPanel-Komponenten (Level 3) enthalten. Der Inhalt eines Level 3 JPanels wird geändert, das ganze muss neu gezeichnet werden, wobei die Zeichnung von dem Level 1 JPanel durchgeführt werden muss (komplexe Berechnung des Layouts ...). Wie macht man das am besten?
Ich könnte die Level 1 JPanel bei dem Level 3 JPanel als ComponentListener registrieren und dann ein ComponentEvent werfen (COMPONENT_RESIZED) und die entsprechende Methode des ComponentListeners passend implementieren. Das setzt voraus, dass ich die Referenz auf en Level 1 JPanel über zwei Ebene weitergeben muss, was mir nicht so gefällt. Insbesondere deshalb, weil die JPanel-Komponenten als Views dienen, während die Daten in einer Model-Klasse verwaltet werden. Die Views sollten möglichst lokal gehalten werden. Gibt es nicht eine einfachere Variante, dies zu bewerkstelligen? Kann ich es irgendwie anders sicherstellen, dass ein vom Level 3 JPanel gefeuertes Event vom Level 1 JPanel doch empfangen wird? Gibte es irgendwo eine "allgemein bekannte" Event-Queue, in die ich das Ereignis einfügen könnte (EDT usw.)?
Es geht nicht darum, dass ich einfach repaintComponent oder so was aufrufe. Ich muss eine Methode des Level 1 JPanels aufrufen, die eine relativ komplexe Berechnung (Layout ... ) macht. Dazu muss ich irgendwie die Meldung an den Level 1 JPanel senden. Kann man das eleganter machen, als die Referenz über drei Ebene weiterzureichen?
Danke