probleme pattern observer/observable
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:
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:
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:
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.