Utiliser le patron Observable en java

[Résolu/Fermé]
Signaler
Messages postés
95
Date d'inscription
mardi 9 mars 2004
Statut
Contributeur
Dernière intervention
29 octobre 2009
-
 MoiMeme -
Bonjour à tous,

J'aimerai utiliser le patron Observeur en java pour informer les visiteurs des changements des pages d'un site web. J'ai regardé la documentation sur le sujet, mais je n'arrive pas à mettre en oeuvre. Pouvez m'indiquer un exemple, le plus complet possible pour une bonne compréhension.

Merci d'avance de votre aide,


Amicalement,


Vincent B

Patience et persévérance, la réussite est au bout

2 réponses

Messages postés
618
Date d'inscription
vendredi 26 juillet 2002
Statut
Membre
Dernière intervention
13 juillet 2013
971
Voici un exemple des plus simples.
Lance la classe Tester.


Classe Tester

public class Tester {

	public Tester() {
	}

	public static void main(String[] args) {
		Tester tester = new Tester();

		ConcreteModel model = new ConcreteModel();

		DisplayPanel display = new DisplayPanel();
		display.setModel(model);
		MainView mainView = new MainView("Observer/Observable");
		mainView.addComponent(display);
		mainView.pack();
		mainView.setVisible(true);
	}
}



ClasseConcreteModel:

import java.util.Date;
import java.util.Observable;

public class ConcreteModel extends Observable {
	private Date now;

	public ConcreteModel() {
		now = new Date();
	}

	public void fireUpdate() {
		now = new Date();
		setChanged();
		notifyObservers(new Date());
	}

}



Classe DisplayPanel:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Observable;
import java.util.Observer;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class DisplayPanel extends JPanel implements Observer {
	private JLabel hour;
	private ConcreteModel model;

	public DisplayPanel() {
		initialize();
	}

	private void initialize() {
		hour = new JLabel();
		JButton jb_getHour = new JButton("Mettre l'heure à jour");
		jb_getHour.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				model.fireUpdate();
			}
		});
		add(hour);
		add(jb_getHour);
	}

	public void update(Observable o, Object arg) {
		GregorianCalendar calendar = (GregorianCalendar) GregorianCalendar.getInstance();
		calendar.setTime((Date) arg);
		hour.setText(calendar.get(GregorianCalendar.HOUR) + ":" + calendar.get(GregorianCalendar.MINUTE)+":"+calendar.get(GregorianCalendar.SECOND));
		hour.validate();
	}

	public void setModel(Observable model) {
		this.model = (ConcreteModel) model;
		model.addObserver(this);
		model.notifyObservers();
	}

}


Classe MainView:

import java.awt.Component;
import java.awt.Container;
import javax.swing.JFrame;

public class MainView extends JFrame {
	private Container c;
	
	public MainView(String name){
		super(name);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		c = getContentPane();		
	}
	
	public void addComponent(Component comp){
		c.add(comp);		
	}

}


Hope it helps

;-)
HackTrack
15
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
95
Date d'inscription
mardi 9 mars 2004
Statut
Contributeur
Dernière intervention
29 octobre 2009
3
Bonjour HackTrack,

Merci pour ta réponse, je viens seulement de lire ton message, mais c'est exactement ce que je voulais, je ne devrais pas avoir de problème pour l'éxécuter, le tester et l'appliquer à ce que je veux faire.


Merci pour tout,


Amicalement,


Vincent B

Patience et persévérance, la réussite est au bout
Bonjour.
Comment faire pour que la modification se fait automatiquement a chaque foit que l'objet change (sans etre obliger à appuier sur le button).
Merci beaucoup.