samplaid
Messages postés34Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention17 juillet 2008
-
14 févr. 2007 à 11:18
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013
-
14 févr. 2007 à 17:24
Bonjour,
J'ai commencé à faire un agenda et un repertoire dans une meme
application. J'aimerais faire un pnl de recherche commun pour les 2. Ma
question est celle-ci : est-il possible de construire mon panel sans
passer tout le tps par des if qui testeront le mode dans lequel je
suis.
Ex : if(mode == 'repertore') listbox.addItem('x');
else listbox.addItem('x');
n'y a t'il pas un moyen par exemple de créé une méthode AddListBox dans
ma classe Rerpetoire et dans ma classe Agenda qui ferait un traitement
différent car n'on pas les 2 classes non pas la meme composition.
Et avec un seul 'if' définir l'objet que j'utilise??
Je ne sais pas si c'est claire pour vous, ce ne l'es pas pour moi non plus
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 14 févr. 2007 à 12:10
Il te suffit de créer une hiérarchie de classe : une interface commune à tes types de comportements, et des classes concrètes pour remplir les fonctionnalités voulues, exemple :
Public Interface Operation {
public int Calcul(int x, int y);
}
Public class Plus implements Operation {
public int Calcul(int x, int y) {
return x + y;
}
}
Public class Moins implements Operation {
public int Calcul(int x, int y) {
return x - y;
}
}
Et ainsi dans tu stocke une instance de la classe à utiliser :
Operation op;
Et tu utilise la fonction Calcul là où t'en a besoin.
Cela est une sorte de pattern Strategy : un algorithme ayant plusieurs implémentations possible, et on utilise dynamiquement l'une ou l'autre implémentation.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 14 févr. 2007 à 15:18
Bah cà devrait marcher, si les classes Plus et Moins implémentent bien l'interface Opération, les instances de ces classes peuvent avoir le type Opération sans problème.
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 14 févr. 2007 à 17:24
Normal, ta variable common, pour pouvoir être utilisée dans une classe interne (ce qui est le cas ici : une instance de la classe KeyAdapter interne à ta classe principale) doit être finale, c'est-à-dire qu'il ne soit pas possible de l'étendre.
Donc ca donne :
final ComponentFilter common;
if (frame.getMode() == 0) {
common = new Agenda(frame);
} else {
common = new Repertoire(frame);
}
txtFilter.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {