Bonjour,
Je scanne l'application pour déterminer les objets présents. Lorsque j'obtiens la liste de ces composants (par exemple un bouton), est-il possible de surcharger les méthodes de ce composant, par exemple paintComponent() ?
Version imprimable
Bonjour,
Je scanne l'application pour déterminer les objets présents. Lorsque j'obtiens la liste de ces composants (par exemple un bouton), est-il possible de surcharger les méthodes de ce composant, par exemple paintComponent() ?
Au runtime ?
Voui...
Non, ce n'est pas possible.
Il y a t-il une explication rationnelle à cela ?
Il faudrait :
1. sauver les données de l'objet à modifier dans une structure adaptée,
2. décharger le code de l'objet à modifier (La JVM ne le permet pas),
3. modifier le source,
4. le compiler,
5. instancier un nouvel objet avec ce code,
6. copier les données de l'ancien objet vers le nouveau,
7. recharger l'objet pour le même pointeur (la JVM ne le permet pas, on n'a pas accès aux pointeurs).
Ou alors il faudrait tapper sur du violent avec un poil d'injection de bytecode au runtime, mais bon pas sur que ça marche non plus...
Par contre tu pourrais plutôt prévoir un mécanisme basé sur un pattern de type delegate ou strategie avec un objet contenant une méthode effectuant les instructions de dessin nécessaires, méthode qui serait appelée dans le paintComponent. Il suffirait alors que changer d'avoir plusieurs implémentations de la classe mère correspondant à ton objet delegate et d'en switcher selon le contexte.
Enfin bref tout dépend de ce que tu cherches à faire.
Mais bon par contre pour celà il faut faire un peu de conception en amont ;)
Merci pour les réponses. Et si je fais une copie de l'objet ?
ou class_bouton serait une classe etendant JButton avec sa propre méthode paintComponent() ? le nouveau bouton serait dessiné à l'endroit exact de l'autre :roll:Code:class_bouton jb2 = jButton_existant ; ?
l'idée finale est de modifier l'apparence de certains objets datant de l'AWT et donc ne disposant pas des facilités de Swing et de Look & Feel.