Utiliser le patron Observable en java

Résolu/Fermé
Vincent B Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Contributeur Dernière intervention 29 octobre 2009 - 9 sept. 2004 à 09:38
 MoiMeme - 7 déc. 2007 à 20:54
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
A voir également:

2 réponses

Utilisateur anonyme
9 sept. 2004 à 10:47
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
Vincent B Messages postés 95 Date d'inscription mardi 9 mars 2004 Statut Contributeur Dernière intervention 29 octobre 2009 3
10 sept. 2004 à 13:56
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
0
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.
2