Bonjour désolé de poster ici ,je sais pas vraiment si c'est le bon endroit pour le MVC ^^ .Donc j'ai commencé a pratiquer le MVC ,j'ai tout d'abord recopié le programme non J2ME disponible sur le site ,je l'ai analysé il marche bien.
J'ai essayé de faire une variante en fait j'ai pour but de faire une calculatrice ,mais la j'en suis qu'au début je fais que une somme entre stock et resultat,stock pourra etre modifié dans les SpinnerView,FieldView.
Le résultat est disponible dans le ListView .Mon problème est que après une opération stock prend la valeur de résultat alors que je lui ai jamais demandé de le faire .
Le problème semble venir du Model ou j'ajoute a resultat la valeur de stock mais je vois pas pourquoi stock varie :s je met tout le code au cas ou .
P.S: En dirait que le programme utilise que resultat et l'affiche partout en fait mais je vois pas pourquoi .
Voici tout le code:le main:
Le model qui fait bugger le tout :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class Calculatrice { public static void main (String[] args) { CalculatriceModel model=new CalculatriceModel(0,0); CalculatriceController controller=new CalculatriceController(model); controller.displayViews(); } }
Le controller :
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 import javax.swing.event.EventListenerList; public class CalculatriceModel{ int resultat,stock; private EventListenerList listeners; public CalculatriceModel(){ super(); resultat=0; stock=0; } public CalculatriceModel(int resultat,int stock) { super(); this.resultat=resultat; this.stock=stock; listeners=new EventListenerList(); } public int getResultat(){ return resultat; } public int getStock(){ return stock; } public void setResultat (int resultat){ this.resultat+=resultat; System.out.println(resultat); //fireResultatChanged(); le problème vient peut etre de la car sans ca stock a la bonne valeur ,mais sans ca pas d'affichage de résultat :s. } public void setStock(int stock){ this.stock=stock; fireStockChanged(); setResultat(stock); System.out.println(stock); } public void addResultatListener(ResultatListener listener) { listeners.add(ResultatListener.class,listener); } public void removeResultatListener(ResultatListener l) { listeners.remove(ResultatListener.class,l); } public void fireResultatChanged() { ResultatListener[] listenerList =(ResultatListener[])listeners.getListeners(ResultatListener.class); for(ResultatListener listener:listenerList) { listener.resultatChanged(new ResultatChangedEvent(this,getResultat())); } } public void addStockListener(StockListener listener) { listeners.add(StockListener.class,listener); } public void removeStockListener(StockListener l) { listeners.remove(StockListener.class,l); } public void fireStockChanged() { StockListener[] listenerList =(StockListener[])listeners.getListeners(StockListener.class); for(StockListener listener:listenerList) { listener.stockChanged(new StockChangedEvent(this,getStock())); } } }
Le view:
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 public class CalculatriceController { public CalculatriceView fieldView =null; public CalculatriceView spinnerView=null; public CalculatriceView listView=null; private CalculatriceModel model=null; public CalculatriceController(CalculatriceModel model) { this.model=model; fieldView=new JFrameFieldCalculatrice(this,model.getResultat(),model.getStock()); spinnerView=new JFrameSpinnerCalculatrice(this,model.getResultat(),model.getStock()); listView=new JFrameListCalculatrice(this,model.getResultat(),model.getStock()); addListenerToModel(); } private void addListenerToModel() { model.addStockListener(fieldView); model.addStockListener(spinnerView); model.addStockListener(listView); model.addResultatListener(fieldView); model.addResultatListener(spinnerView); model.addResultatListener(listView); } public void displayViews() { fieldView.display(); spinnerView.display(); listView.display(); } public void close() { fieldView.close(); spinnerView.close(); listView.close(); } public void notifyStockChanged(int stock) { model.setStock(stock); System.out.println(stock); System.out.println("change1"); } }
le JFrameField:
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 public abstract class CalculatriceView implements ResultatListener,StockListener { private CalculatriceController controller =null; public CalculatriceView(CalculatriceController controller) { super(); this.controller=controller; } public final CalculatriceController getController() { return controller; } public abstract void display(); public abstract void close(); }
Le Jframe List:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.NumberFormat; import javax.swing.JButton; import javax.swing.JFormattedTextField; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.text.DefaultFormatter; public class JFrameFieldCalculatrice extends CalculatriceView implements ActionListener{ private JFrame frame=null; private JPanel contentPane=null; private JFormattedTextField field =null; private JButton button =null; private NumberFormat format =null; public JFrameFieldCalculatrice(CalculatriceController controller) { this(controller, 0,0); } public JFrameFieldCalculatrice(CalculatriceController controller, int resultat,int stock) { // TODO Auto-generated constructor stub super(controller); buildFrame(resultat,stock); } private void buildFrame(int resultat, int stock) { frame=new JFrame(); contentPane =new JPanel(); format=NumberFormat.getNumberInstance(); format.setParseIntegerOnly(true); format.setGroupingUsed(false); format.setMaximumFractionDigits(0); format.setMaximumIntegerDigits(3); field=new JFormattedTextField(format); field.setValue(stock); ((DefaultFormatter)field.getFormatter()).setAllowsInvalid(false); contentPane.add(field); button=new JButton("Mettre a jour"); button.addActionListener(this); contentPane.add(button); frame.setContentPane(contentPane); frame.setTitle("JFramefieldCalculatrice"); frame.pack(); } public void close(){ // TODO Auto-generated method stub frame.dispose(); } public void display() { // TODO Auto-generated method stub frame.setVisible(true); } @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub getController().notifyStockChanged(Integer.parseInt(field.getValue().toString())); } public void stockChanged(StockChangedEvent event) { // TODO Auto-generated method stub field.setValue(event.getNewStock()); } @Override public void resultatChanged(ResultatChangedEvent event) { // TODO Auto-generated method stub field.setValue(event.getNewResultat()); } }
Le Jframe Spinner:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.DefaultListModel; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; public class JFrameListCalculatrice extends CalculatriceView implements ActionListener { private JFrame frame=null; private JPanel contentPane=null; private JList listCalculatrice=null; private JScrollPane scrollCalculatrice =null; private DefaultListModel jListModel=null; public JFrameListCalculatrice(CalculatriceController controller) { this(controller,0,0); } public JFrameListCalculatrice(CalculatriceController controller, int resultat,int stock) { // TODO Auto-generated constructor stub super(controller); buildFrame(resultat,stock); } private void buildFrame(int resultat,int stock) { frame=new JFrame(); contentPane=new JPanel(); jListModel=new DefaultListModel(); jListModel.addElement(resultat); listCalculatrice =new JList(jListModel); scrollCalculatrice=new JScrollPane(listCalculatrice); contentPane.add(scrollCalculatrice); frame.setContentPane(contentPane); frame.setTitle("JFrameListCalculatrice"); frame.pack(); } @Override public void close() { // TODO Auto-generated method stub frame.dispose(); } @Override public void display() { // TODO Auto-generated method stub frame.setVisible(true); } @Override public void resultatChanged(ResultatChangedEvent event) { // TODO Auto-generated method stub jListModel.addElement(event.getNewResultat()); } @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub } @Override public void stockChanged(StockChangedEvent event) { // TODO Auto-generated method stub } }
Le changedEvent pour resultat:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; public class JFrameSpinnerCalculatrice extends CalculatriceView implements ActionListener { private JFrame frame=null; private JPanel contentPane=null; private JSpinner spinner=null; private SpinnerNumberModel spinnerModel=null; private JButton button =null; public JFrameSpinnerCalculatrice(CalculatriceController controller) { this(controller,0,0); // TODO Auto-generated constructor stub } public JFrameSpinnerCalculatrice(CalculatriceController controller, int resultat,int stock) { // TODO Auto-generated constructor stub super(controller); buildFrame(resultat,stock); } public void buildFrame(int resultat , int stock) { frame=new JFrame(); contentPane=new JPanel(); spinnerModel =new SpinnerNumberModel(stock,0,100,1); spinner=new JSpinner (spinnerModel); contentPane.add(spinner); button=new JButton("Mettre a jour"); button.addActionListener(this); contentPane.add(button); frame.setContentPane(contentPane); frame.setTitle("JFrameSpinnerVolume"); frame.pack(); } @Override public void close() { // TODO Auto-generated method stub frame.dispose(); } @Override public void display() { // TODO Auto-generated method stub frame.setVisible(true); } public void StockChanged(StockChangedEvent event) { // TODO Auto-generated method stub spinnerModel.setValue(event.getNewStock()); } @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub getController().notifyStockChanged(spinnerModel.getNumber().intValue()); } @Override public void resultatChanged(ResultatChangedEvent event) { // TODO Auto-generated method stub spinnerModel.setValue(event.getNewResultat()); } @Override public void stockChanged(StockChangedEvent event) { // TODO Auto-generated method stub spinnerModel.setValue(event.getNewStock()); } }
Le listener de resultat:
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 import java.util.EventObject; public class ResultatChangedEvent extends EventObject { private int newResultat; public ResultatChangedEvent(Object source ,int newResultat) { // TODO Auto-generated method stub super(source); this.newResultat=newResultat; } public int getNewResultat(){ return newResultat; } }
le changedevent de stock:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 import java.util.EventListener; public interface ResultatListener extends EventListener { public void resultatChanged(ResultatChangedEvent event); }
Et le listener de stock:
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 import java.util.EventObject; public class StockChangedEvent extends EventObject { private int newStock; public StockChangedEvent(Object source ,int newStock) { // TODO Auto-generated method stub super(source); this.newStock=newStock; } public int getNewStock(){ return newStock; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 import java.util.EventListener; public interface StockListener extends EventListener { public void stockChanged(StockChangedEvent event); }
Merci d'avance ^^.
Partager