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:
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 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
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 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
 
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 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
 
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 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
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 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
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 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
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 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
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 listener de resultat:
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);
 
 
}
le changedevent 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;
	}
}
Et le listener de stock:
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 ^^.