Hallo an alle,
mich würde interessieren, wie genau es funktioniert, dass ein, sagen wir mal MouseEvent (Click/Enter/Exit/...) auch von der korrekten Componente ausgelöst wird?
Konkreter: Wenn ich auf einen Button oder eine beliebige andere Komponente einer GUI klicke, wie ermittelt AWT dann die genaue Komponente? Meine erste idee wäre, alle Komponenten sind irgendwo registriert(auf einem Panel oder Frame z.b.) und wenn ein Klick durchgeführt oder die Maus bewegt wird, werden stets sämtliche registrierte Komponenten durchlaufen, deren sichtbare Bereiche abgefragt und letztendlich geprüft, ob sich die Maus gerade in einer Komponente befindet. sollte dies der Fall sein, wird ggf. der passende Actionlistener aufgerufen und der enthaltene Code ausgeführt.
IMHO ist dies eine recht rechenintensive Sache und würde bedeuten, dass eine GUI immer langsamer werden würde, je mehr Komponenten und Listener es auf ihr gibt.
Ich weiß bereits, dass seit java 1.1 nur diejenigen Komponenten geprüft werden, die einen Actionlistener besitzen.
Tortzdem wäre das noch sehr aufwändig, wenn man immer alle (lauschenden) Komponenten prüfen würde.
Vereinfachungen, wie sortierte Listen und entsprechend optimierte suchalgorithmen, fallen mir viele ein(zwei sortierte listen in denen je alle komponenten enthalten sind, einmal nach x- und zum anderen nach y-position sortiert, danach quicksearch auf beiden listen oder binäre suche etc. pp.)
Welche Technik setzt AWT/SWING nun aber konkret ein?
für Informationen wäre ich enorm dankbar
kdot
mich würde interessieren, wie genau es funktioniert, dass ein, sagen wir mal MouseEvent (Click/Enter/Exit/...) auch von der korrekten Componente ausgelöst wird?
Konkreter: Wenn ich auf einen Button oder eine beliebige andere Komponente einer GUI klicke, wie ermittelt AWT dann die genaue Komponente? Meine erste idee wäre, alle Komponenten sind irgendwo registriert(auf einem Panel oder Frame z.b.) und wenn ein Klick durchgeführt oder die Maus bewegt wird, werden stets sämtliche registrierte Komponenten durchlaufen, deren sichtbare Bereiche abgefragt und letztendlich geprüft, ob sich die Maus gerade in einer Komponente befindet. sollte dies der Fall sein, wird ggf. der passende Actionlistener aufgerufen und der enthaltene Code ausgeführt.
IMHO ist dies eine recht rechenintensive Sache und würde bedeuten, dass eine GUI immer langsamer werden würde, je mehr Komponenten und Listener es auf ihr gibt.
Ich weiß bereits, dass seit java 1.1 nur diejenigen Komponenten geprüft werden, die einen Actionlistener besitzen.
Tortzdem wäre das noch sehr aufwändig, wenn man immer alle (lauschenden) Komponenten prüfen würde.
Vereinfachungen, wie sortierte Listen und entsprechend optimierte suchalgorithmen, fallen mir viele ein(zwei sortierte listen in denen je alle komponenten enthalten sind, einmal nach x- und zum anderen nach y-position sortiert, danach quicksearch auf beiden listen oder binäre suche etc. pp.)
Welche Technik setzt AWT/SWING nun aber konkret ein?
für Informationen wäre ich enorm dankbar
kdot