Bonjour à tous,
Je souhaite faire une application selon la convention MVC (Model View Controller). Je rencontre plusieurs problèmes dans la structure de mon programme. Ci-joints vous trouverez une explication en image de l'application que je souhaite développer.
1 - Barre menu : permet d'afficher le panel de votre choix
2 - Liste service : liste déroulante commune à tous les panels
3 - Panel vue : les différentes vues prenant en compte le service sélectionné
Voici l'architecture de mon programme qui doit respecter en gros la norme MVC :
View.java : vue principale permettant de gérer la fenêtre :
control.java : controller principal de la fenêtre
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 public class View extends JFrame { private static final long serialVersionUID = 1L; private JMenuItem itemView1 = new JMenuItem("Vue 1"); private JMenuItem itemView2 = new JMenuItem("Vue 2"); private JMenuItem itemView3 = new JMenuItem("Vue 3"); private JComboBox cmbService = new JComboBox(); private Control control; public View(Control control) { this.control = control; createGUI(); } private void createGUI() { JMenuBar menuBarre = new JMenuBar(); JMenu menu1 = new JMenu("File"); menu1.add(itemView1); menu1.add(itemView2); menu1.add(itemView3); itemView1.addActionListener(control); itemView2.addActionListener(control); itemView3.addActionListener(control); menuBarre.add(menu1); JPanel panAction = new JPanel(); cmbService.addItem("Service 1"); cmbService.addItem("Service 2"); panAction.add(cmbService); panAction.setBackground(Color.DARK_GRAY); JPanel panVue = new JPanel(); panVue.setBackground(Color.LIGHT_GRAY); getContentPane().add(panAction, BorderLayout.NORTH); getContentPane().add(panVue, BorderLayout.CENTER); setJMenuBar(menuBarre); setTitle("Fenetre test"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setPreferredSize(new Dimension(600, 400)); JFrame.setDefaultLookAndFeelDecorated(true); pack(); //this.setExtendedState(MAXIMIZED_BOTH); setLocationRelativeTo(null); } public JMenuItem getItemView1() { return itemView1; } public JMenuItem getItemView2() { return itemView2; }
Pour commencer mon controller implémente ActionListener pour écouter les évènements de la vue (barre menu), le problème est que si je souhaite ajouter un menu contextuel il faudra que je réécrive une nouvelle méthode (difficile à maintenir).
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
21
22
23
24
25
26
27
28
29 public class Control implements ActionListener { private Model model; private View view; public Control(Model model) { this.model = model; this.view = new View(this); } public void displayView() { this.view.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == view.getItemView1()) { ModelView1 model1 = new ModelView1(); ControlView1 control1 = new ControlView1(model1); control1.displayView() } else if (e.getSource() == view.getItemView2()) { ModelView2 model2 = new ModelView2(); ControlView2 control2 = new ControlView2(model2); control2.displayView() } ........... } }
J'ai pensé écrire une classe controller de la barre de menu étendant de AbstractListener mais il serait alors difficile de connaitre la vue ouverte et le service sélectionné.
Voila, tout cela est basique, mais il n'est pas si facile de créer une structure propre et maintenable. Pouvez vous me donner quelques idées, quelques pistes pour réaliser ce genre de petit programme. Je reste à votre disposition pour des renseignements complémentaires.
Meci
Partager