IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

probleme pattern observer/observable


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 177
    Points : 106
    Points
    106
    Par défaut 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 : 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.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Points : 170
    Points
    170
    Par défaut
    Salut,

    ton code fonctionne est bon ta seule erreur vient des lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monEntier = monEntier++;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monEntier = monEntier--;
    l'opérateur ++, incremente la variable et retourne l'ancienne valeur
    donc quand tu fais:
    monEntier = monEntier++;
    c'est commme si tu faisais
    oldEntier = monEntier;
    monEntier = monEntier+1;
    monEntier = oldEntier;
    Donc tu ne changes pas la valeur de mon entier.
    Pour increment un entier il suffit de faire
    monEntier++


    Donc le code vient, par exemple pour incremente:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void incremente(){
    		monEntier++;
    		System.out.println("incrémenté");;
    		setChanged();
        	notifyObservers();
    	}

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 177
    Points : 106
    Points
    106
    Par défaut re
    bien evidemment!

    merci à toi, parfois un oeil nouveau ça fait du bien!

  4. #4
    Membre averti Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Points : 356
    Points
    356
    Par défaut
    s'il veut retourner tout de suite la nouvelle valeur il n'a qu'à utiliser la pré-incrémentation: ++variable;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comprendre le pattern Observable / Observer
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 22/04/2012, 10h26
  2. Réponses: 2
    Dernier message: 26/12/2010, 22h08
  3. Design Pattern Observer/Observable
    Par CedricMocquillon dans le forum C++
    Réponses: 9
    Dernier message: 08/04/2009, 09h17
  4. observer / observable
    Par alex6891 dans le forum Java ME
    Réponses: 9
    Dernier message: 03/05/2006, 15h31
  5. [DP] observer-observable
    Par schousso dans le forum Général Java
    Réponses: 4
    Dernier message: 15/05/2004, 00h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo