Bonjour à tous,
Je souhaite réaliser une application suivant la méthode MVC. Pour commencer j'ai créé une JFRAME avec un modèle, une vue et un contrôleur. Le contrôleur de cette JFRAME fera office du contrôleur frontal ou super contrôleur.
A l'intérieur de cette fenêtre il y aura le JPANEL que l'utilisateur aura choisi d'afficher par l'intermédiaire de la barre de menu.
Bref, chaque JPANEL est développez suivant la même norme, avec un modèle une vue et contrôleur. Comme le contrôleur doit le moins possible être dépendant de Swing, j'ai créé une classe abstraite représentant la vue du JPANEL. J'ai aussi développé une classe abstraite représentant le contrôleur du JPANEL pour faciliter la manipulation depuis le contrôleur frontal de la JFRAME.
Voila pour le topo, mais j'ai un petit problème dans la conception de ces classes abstraites. Voici le code des classes abstraites :
classe abstraite représentant la vue du JPANEL
classe abstraite représentant le contrôleur du JPANEL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public abstract class AbstractPanel extends JPanel { protected AbstractControl control; public AbstractPanel(AbstractControl control) { super(); this.control = control; } public AbstractControl getControl() { return control; } }
Maintenant je vais vous donner le code du contrôleur d'un des nombreux JPANEL qui hérite de la classe abstraite AbstractControl :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public abstract class AbstractControl { protected AbstractPanel view; public AbstractControl(AbstractPanel view) { super(); this.view = view; } public AbstractPanel getView() { return view; } public abstract void refreshView(); public abstract void serviceChanged(TblService service); public abstract void dateChanged(Date dateJour); }
Il y a un problème au niveau du constructeur de cette classe, boucle sans fin. En effet, je voudrais que le contrôleur créé une instance de sa vue en lui donnant sa référence en paramètre. Je pense comprendre pourquoi cela ne fonctionne pas, mais je n'arrive pas à trouver une solution pour palier à se problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 public class ControlAccueil extends AbstractControl{ public ControlAccueil() { // ici erreur a la compilation // cannot refer to this while explicitly invoking a constructor super(new ViewAccueil(this)); } @Override public void refreshView() {} @Override public void serviceChanged(TblService service) {} @Override public void dateChanged(Date dateJour) {} }
Merci pour votre aide
Partager