Hallo an alle !!
Ich habe eine kleine Verständnisfrage, mit der ich sicher gehen will, dass ich effizient mit der Zeichenfunktionalität von Swing umgehe.
Ich habe unzählige Swing Componenten, bei denen ich ein eigenes Aussehen in der paintComponent(); method vorgenommen habe. Was mich allerdings wundert ist, wie oft die Methode doch ausgeführt wird, obwohl laut einer Aussage diese nur dann gerufen wird wenn:
Die Komponente wird zum erstenmal sichtbar auf dem Bildschirm abgebildet.
Die Komponente wird in der Größe verändert.
Die Komponente wurde beschädigt und muß repariert werden (zum Beispiel wurde etwas verschoben, das vorher die Komponente verdeckte, und ein vorher verdeckter Teil der Komponente wird sichtbar).
Was aber zum Beispiel bei einem JPanel, dass ich als JButton fake (Mousevents die nen Enum State ändern und dann jeweils ein anderes Bild in der paintComponent() method zeichnen) passiert, ist das obwohl keine Interaktion mit dem Panel über die Maus erfolgt, die paintComponent permanent ausgeführt wird. Ich würde jetzt schlichtweg gern sicherstellen, ob dann nur geprüft wird, ob ein repaint notwendig ist, oder ob tatsächlich trotz keiner Veränderung die Component neu gezeichnet wird.
Falls der Aufruf öfter erfolgt als notwendig, könnte das daran liegen, dass alle meine Komponenten von dem vorherigen Entwickler in einem JPanel gelegt worden sind?! In diesem wird eine Animation ausgeführt die permanent einen repaint auslöst. Falls das bedeutet, dass auch alle child componenten neu gezeichnet werden, wüsste ich die Ursache und einen hohen Performanzverlust.
Ich hätte letztlich nur gern Gewissheit, wie die pipeline exakt aussieht und ob ich in meinem Programm Handlungsbedarf habe ?!
Herzlichen Dank!!
LG
tuedel
Ich habe eine kleine Verständnisfrage, mit der ich sicher gehen will, dass ich effizient mit der Zeichenfunktionalität von Swing umgehe.
Ich habe unzählige Swing Componenten, bei denen ich ein eigenes Aussehen in der paintComponent(); method vorgenommen habe. Was mich allerdings wundert ist, wie oft die Methode doch ausgeführt wird, obwohl laut einer Aussage diese nur dann gerufen wird wenn:
Die Komponente wird zum erstenmal sichtbar auf dem Bildschirm abgebildet.
Die Komponente wird in der Größe verändert.
Die Komponente wurde beschädigt und muß repariert werden (zum Beispiel wurde etwas verschoben, das vorher die Komponente verdeckte, und ein vorher verdeckter Teil der Komponente wird sichtbar).
Was aber zum Beispiel bei einem JPanel, dass ich als JButton fake (Mousevents die nen Enum State ändern und dann jeweils ein anderes Bild in der paintComponent() method zeichnen) passiert, ist das obwohl keine Interaktion mit dem Panel über die Maus erfolgt, die paintComponent permanent ausgeführt wird. Ich würde jetzt schlichtweg gern sicherstellen, ob dann nur geprüft wird, ob ein repaint notwendig ist, oder ob tatsächlich trotz keiner Veränderung die Component neu gezeichnet wird.
Falls der Aufruf öfter erfolgt als notwendig, könnte das daran liegen, dass alle meine Komponenten von dem vorherigen Entwickler in einem JPanel gelegt worden sind?! In diesem wird eine Animation ausgeführt die permanent einen repaint auslöst. Falls das bedeutet, dass auch alle child componenten neu gezeichnet werden, wüsste ich die Ursache und einen hohen Performanzverlust.
Ich hätte letztlich nur gern Gewissheit, wie die pipeline exakt aussieht und ob ich in meinem Programm Handlungsbedarf habe ?!
Herzlichen Dank!!
LG
tuedel