gfive |
Damend de touche tab!!
Donc, ensuite, j'ai une méthode fill, qui instancie les éléments graphiques "en plus" (labels, panels, etc....sur lesquels j'ai pas besoin d'avoir de référence) et qui fait le layout............
Généralement, je m'en tire avec moins d'une demi-douzaine d'éléments de base par classe...sinon, de toute façon, je redécoupe....ça veut dire que je me suis mal démerdé pour définir les responsabilités de chaque bout....
Et sinon, pour les interactions entre "gros bouts", généralement, je réécris mon propore manager d'évènements : en effet, le plus souvent, ces interactions correspondent plus à des évènements inhérents à l'appli qu'à des évènements purement graphiques (par exemple, quend l'utilisateur appuie sur le bouton 'envoi', je préfère notifier les autres éléments d'un évènemente 'envoi' que d'un évènement 'appui sur un bouton, qui s'appelle envoi') de cette façon, si le client change d'avis sur le design, mes communications entre éléments sont pas à refaire. De cette façon, par exemple, pour ajouter un label dans une zone, ou pour modifier l'aspectgénéral de mon machin, j'ai pas une méthode de 300 lignes à relire, et un layout de fou à travailler....D'un autre côté, j'ai beaucoup de panels, mais j'y gagne en lisibilité et surtout en réutilisabilité..
Ouala..
Sinon, pour le modèle du gestionnaire d'évènements, c'est très simple, il suffit d'avoir une interface MyEvent, qui définit une méthode 'handleEvent", et tu redéfinis cette méthode dans chaque classe d'évènement de la façon suivants :
class TotoEvent implements MyEvent {
public void handleEvent(MyListener listener) {
if (listener instanceof TotoListener) { ((TotoListener)listener).handleTotoEvent(this);
}
}
Pour la classe qui maage les évènements, le code est tout con : private boolean listensAlready(Object o) {
for (int i = 0; i < listeners.size(); i++) {
if (listeners.elementAt(i) == o) {
return true;
}
} return false;
}
/** Adds the given object as a MyEvent listener */
public void addListener(Object o) {
if (!listensAlready(o)) {
listeners.addElement(o);
}
}
/** remove the given object from the MyEvent listeners list*/
public void removeListener(Object o) {
listeners.removeElement(o);
}
/** Fire the given event to the appropriate listeners.*/
public void fireEvent(MyEvent event) {
for (int i = 0; i < listeners.size(); i++) {
event.handleEvent(listeners.elementAt(i));
}
}
où listeners est un vecteur
Avec un système comme ça, si une classe est listener de 3 types d'évènements différents, j'ai pas à me faire chier à l'enregistrer 3 fois auprès du manager...
Ouala!!! :) |