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 :
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 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(); } }
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
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) {} }
mon problème est que je n'ai aucune réaction lors de l'appui sur + et -.
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; }
Merci pour votre aide.
Partager