Bonjour,

J'essaye de mettre en oeuvre le pattern observer/observable dan sune petite application :
Je veux afficher trois fenêtres, sur chaque fenêtre un champ texte et un bouton + et -. Lors de l'appui sur + ou - je souhaite mettre à jour la valeur du champ texte en l'incrémentant ou le décrémentant et ceci sur otutes les fenêtres.

Pour cela j'ai crée trois classes :

La classe qui étend Observable :
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
 
import java.util.Observable;
 
public class ObservableObject extends Observable {
 
	private int monEntier;	
 
	public ObservableObject(){
		this.monEntier = 0;
	}
 
	public ObservableObject(int monEntier){
		this.monEntier = monEntier;
	}
 
	public int getMonEntier() {
		return monEntier;
	}
 
	public void setMonEntier(int monEntier) {
		this.monEntier = monEntier;
		setChanged();
    	notifyObservers();
	}
 
	public void incremente(){
		monEntier = monEntier++;
		System.out.println("incrémenté");;
		setChanged();
    	notifyObservers();
	}
 
	public void decremente(){
		monEntier = monEntier--;
		System.out.println("décrémenté");;
		setChanged();
    	notifyObservers();
	}
 
}
La classe implémentant qui étend Observer :
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
 
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Observable;
import java.util.Observer;
 
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
 
public class ObserverPanel extends JPanel implements Observer, MouseListener {
 
	private JTextField champText;
	private JButton incrButton;
	private JButton decrButton;
	private ObservableObject observableObject;
 
 
	public ObserverPanel(){
 
		champText = new JTextField(10);
		incrButton = new JButton("+");
		incrButton.setName("incButton");
		decrButton = new JButton("-");
		decrButton.setName("decButton");
		observableObject = new ObservableObject();
		champText.setText(Integer.toString(observableObject.getMonEntier()));
		observableObject.addObserver(this);
		update(observableObject,null);
 
		incrButton.addMouseListener(this);
		decrButton.addMouseListener(this);
 
		this.add(champText);
		this.add(incrButton);
		this.add(decrButton);
 
	}
 
	public void update(Observable o, Object arg) {
		// TODO Auto-generated method stub
		ObservableObject observableObject = (ObservableObject)o;
		champText.setText(Integer.toString(observableObject.getMonEntier()));
		System.out.println(observableObject.getMonEntier());
	}
 
	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		String sourceName = ((JButton)e.getSource()).getName();
 
		if(sourceName.equals("incButton")){
			observableObject.incremente();			
		}
 
		if(sourceName.equals("decButton")){
			observableObject.decremente();
		}		
 
	}
 
	public void mouseEntered(MouseEvent e) {}
	public void mouseExited(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}
 
}
et une classe qui fournit un point d'entrée su rle programme :
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
 
import java.awt.Dimension;
import java.awt.GridLayout;
 
import javax.swing.JFrame;
 
 
public class testObserverObservable {
 
	public static void main(String[] args) {
 
		ObserverPanel observerPanel = new ObserverPanel();
		ObserverPanel observerPanel2 = new ObserverPanel();
		ObserverPanel observerPanel3 = new ObserverPanel();
 
		/*
		 * On crée 3 fenetres separées contenant chacune un élément du système
		 */
		JFrame frame = new JFrame("JFrame1");
		frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
		Dimension panelDimension = new Dimension(width,height);
		frame.setMinimumSize(panelDimension);
		frame.setSize(panelDimension);
		frame.setPreferredSize(panelDimension);
		frame.setBounds(x, y, width,height);
		frame.add(observerPanel);
 
		JFrame frame2 = new JFrame("JFrame2");
		frame2.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
		frame2.setMinimumSize(panelDimension);
		frame2.setSize(panelDimension);
		frame2.setPreferredSize(panelDimension);
		frame2.setBounds(x , y+height+50, width,height);
		frame2.add(observerPanel2);
 
		JFrame frame3 = new JFrame("JFrame3");
		frame3.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
		frame3.setMinimumSize(panelDimension);
		frame3.setSize(panelDimension);
		frame3.setPreferredSize(panelDimension);
		frame3.setBounds(x+width+50 , y, width,height);
		frame3.add(observerPanel3);
 
		frame.setVisible(true);
		frame2.setVisible(true);
		frame3.setVisible(true);
		//frame4.setVisible(true);
 
	}
	/**
         * Position horizontale de référence des fenêtres
         */
	private static int x = 10;
	/**
         * Position verticale de référence des fenêtres
         */
	private static int y = 10;
	/**
         * Largeur des fenêtres
         */
	private static int width = 320;
	/**
         * Hauteur des fenêtres
         */
	private static int height = 300;
}
mon problème est que je n'ai aucune réaction lors de l'appui sur + et -.

Merci pour votre aide.