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

Composants Java Discussion :

MVC du tutoriel


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 41
    Par défaut MVC du tutoriel
    Bonjour désolé de poster ici ,je sais pas vraiment si c'est le bon endroit pour le MVC ^^ .Donc j'ai commencé a pratiquer le MVC ,j'ai tout d'abord recopié le programme non J2ME disponible sur le site ,je l'ai analysé il marche bien.
    J'ai essayé de faire une variante en fait j'ai pour but de faire une calculatrice ,mais la j'en suis qu'au début je fais que une somme entre stock et resultat,stock pourra etre modifié dans les SpinnerView,FieldView.
    Le résultat est disponible dans le ListView .Mon problème est que après une opération stock prend la valeur de résultat alors que je lui ai jamais demandé de le faire .
    Le problème semble venir du Model ou j'ajoute a resultat la valeur de stock mais je vois pas pourquoi stock varie :s je met tout le code au cas ou .
    P.S: En dirait que le programme utilise que resultat et l'affiche partout en fait mais je vois pas pourquoi .
    Voici tout le code:le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
     
    public class Calculatrice {
     
    	public static void main (String[] args)
    	{
    		CalculatriceModel model=new CalculatriceModel(0,0);
    		CalculatriceController controller=new CalculatriceController(model);
    		controller.displayViews();
     
    	}
    }
    Le model qui fait bugger le tout :
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    import javax.swing.event.EventListenerList;
     
    public class CalculatriceModel{
    	int resultat,stock;
     
    	private EventListenerList listeners;
     
    	public CalculatriceModel(){
    		super();
     
    		resultat=0;
    		stock=0;
    	}
     
    	public CalculatriceModel(int resultat,int stock)
    	{
    		super();
     
    		this.resultat=resultat;
    		this.stock=stock;
    		listeners=new EventListenerList();
    	}
    	public int getResultat(){
    		return resultat;
    	}
    	public int getStock(){
    		return stock;
    	}
     
    	public void setResultat (int resultat){
     
    		this.resultat+=resultat;
    		System.out.println(resultat);
    		//fireResultatChanged(); le problème vient peut etre de la car sans ca stock a la bonne valeur ,mais sans ca pas d'affichage de résultat :s.
     
    	}
    	public void setStock(int stock){
    		this.stock=stock;
    		fireStockChanged();
    		setResultat(stock);
    		System.out.println(stock);
     
    	}
     
    	public void addResultatListener(ResultatListener listener)
    	{
    		listeners.add(ResultatListener.class,listener);
    	}
     
    	public void removeResultatListener(ResultatListener l)
    	{
    		listeners.remove(ResultatListener.class,l);
    	}
     
    	public void fireResultatChanged()
    	{
    		ResultatListener[] listenerList =(ResultatListener[])listeners.getListeners(ResultatListener.class);
     
    		for(ResultatListener listener:listenerList)
    		{
    			listener.resultatChanged(new ResultatChangedEvent(this,getResultat()));	
    		}	
    	}
     
    	public void addStockListener(StockListener listener)
    	{
    		listeners.add(StockListener.class,listener);
    	}
     
    	public void removeStockListener(StockListener l)
    	{
    		listeners.remove(StockListener.class,l);
    	}
     
    	public void fireStockChanged()
    	{
    		StockListener[] listenerList =(StockListener[])listeners.getListeners(StockListener.class);
     
    		for(StockListener listener:listenerList)
    		{
    			listener.stockChanged(new StockChangedEvent(this,getStock()));	
    		}	
    	}
    }
    Le controller :
    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
     
    public class CalculatriceController {
     
    	public CalculatriceView fieldView =null;
    	public CalculatriceView spinnerView=null;
    	public CalculatriceView listView=null;
     
    private CalculatriceModel model=null;
     
    	public CalculatriceController(CalculatriceModel model)
    	{
    		this.model=model;
     
    		fieldView=new JFrameFieldCalculatrice(this,model.getResultat(),model.getStock());
    		spinnerView=new JFrameSpinnerCalculatrice(this,model.getResultat(),model.getStock());
    		listView=new JFrameListCalculatrice(this,model.getResultat(),model.getStock());
     
    		addListenerToModel();
    	}
     
    	private void addListenerToModel()
    	{
    		model.addStockListener(fieldView);
    		model.addStockListener(spinnerView);
    		model.addStockListener(listView);	
     
    		model.addResultatListener(fieldView);
    		model.addResultatListener(spinnerView);
    		model.addResultatListener(listView);
    	}
     
    	public void displayViews()
    	{
     
    		fieldView.display();
    		spinnerView.display();
    		listView.display();
     
    	}
     
    	public void close()
    	{
    		fieldView.close();
    		spinnerView.close();
    		listView.close();
    	}
    	public void notifyStockChanged(int stock)
    	{
    		model.setStock(stock);
    		System.out.println(stock);
    		System.out.println("change1");
    	}
    }
    Le view:
    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
     
    public abstract class CalculatriceView implements ResultatListener,StockListener {
     
    private CalculatriceController controller =null;
     
    	public CalculatriceView(CalculatriceController controller)
    	{
    		super();
     
    		this.controller=controller;
     
    	}
     
    	public final CalculatriceController getController()
    	{
    		return controller;	
    	}
    	public abstract void display();
     
    	public abstract void close();
    }
    le JFrameField:
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    	import java.text.NumberFormat;
     
    	import javax.swing.JButton;
    	import javax.swing.JFormattedTextField;
    	import javax.swing.JFrame;
    	import javax.swing.JPanel;
    import javax.swing.text.DefaultFormatter;
     
    public class JFrameFieldCalculatrice extends CalculatriceView implements ActionListener{
     
    	private JFrame frame=null;
    	private JPanel contentPane=null;
    	private JFormattedTextField field =null;
    	private JButton button =null;
    	private NumberFormat format =null;
     
    	public JFrameFieldCalculatrice(CalculatriceController controller)
    	{
    		this(controller, 0,0);
    	}
     
    	public JFrameFieldCalculatrice(CalculatriceController controller, int resultat,int stock) {
    		// TODO Auto-generated constructor stub
    		super(controller);
     
    		buildFrame(resultat,stock);
    	}
     
    	private void buildFrame(int resultat, int stock)
    	{
    		frame=new JFrame();
    		contentPane =new JPanel();
     
    		format=NumberFormat.getNumberInstance();
    		format.setParseIntegerOnly(true);
    		format.setGroupingUsed(false);
    		format.setMaximumFractionDigits(0);
    		format.setMaximumIntegerDigits(3);
     
    		field=new JFormattedTextField(format);
    		field.setValue(stock);
     
    		((DefaultFormatter)field.getFormatter()).setAllowsInvalid(false);
    		contentPane.add(field);
     
     
    		button=new JButton("Mettre a jour");
    		button.addActionListener(this);
    		contentPane.add(button);
     
    		frame.setContentPane(contentPane);
    		frame.setTitle("JFramefieldCalculatrice");
    		frame.pack();
    	}
     
    	public void close(){
    		// TODO Auto-generated method stub
    		frame.dispose();
     
    	}
     
    	public void display() {
    		// TODO Auto-generated method stub
    		frame.setVisible(true);
     
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		// TODO Auto-generated method stub
    		getController().notifyStockChanged(Integer.parseInt(field.getValue().toString()));
     
    	}
     
    	public void stockChanged(StockChangedEvent event) {
    		// TODO Auto-generated method stub
    		field.setValue(event.getNewStock());
    	}
     
    	@Override
    	public void resultatChanged(ResultatChangedEvent event) {
    		// TODO Auto-generated method stub
    		field.setValue(event.getNewResultat());
    	}
    }
    Le Jframe List:
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.DefaultListModel;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
     
    public class JFrameListCalculatrice extends CalculatriceView implements ActionListener {
     
    	private JFrame frame=null;
    	private JPanel contentPane=null;
    	private JList listCalculatrice=null;
    	private JScrollPane scrollCalculatrice =null;
    	private DefaultListModel jListModel=null;
     
    	public JFrameListCalculatrice(CalculatriceController controller)
    	{
    		this(controller,0,0);
     
    	}
     
    	public JFrameListCalculatrice(CalculatriceController controller, int resultat,int stock) {
    		// TODO Auto-generated constructor stub
    		super(controller);
     
    		buildFrame(resultat,stock);
     
    	}
    	private void buildFrame(int resultat,int stock)
    	{
    		frame=new JFrame();
     
    		contentPane=new JPanel();
     
    		jListModel=new DefaultListModel();
    		jListModel.addElement(resultat);
     
    		listCalculatrice =new JList(jListModel);
     
    		scrollCalculatrice=new JScrollPane(listCalculatrice);
    		contentPane.add(scrollCalculatrice);
     
    		frame.setContentPane(contentPane);
    		frame.setTitle("JFrameListCalculatrice");
    		frame.pack();
     
    	}
     
    	@Override
    	public void close() {
    		// TODO Auto-generated method stub
    		frame.dispose();
    	}
     
    	@Override
    	public void display() {
    		// TODO Auto-generated method stub
    		frame.setVisible(true);
    	}
     
    	@Override
    	public void resultatChanged(ResultatChangedEvent event) {
    		// TODO Auto-generated method stub
     
    		jListModel.addElement(event.getNewResultat());
     
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		// TODO Auto-generated method stub
     
    	}
     
    	@Override
    	public void stockChanged(StockChangedEvent event) {
    		// TODO Auto-generated method stub
     
    	}
     
     
    }
    Le Jframe Spinner:
    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JSpinner;
    import javax.swing.SpinnerNumberModel;
     
    public class JFrameSpinnerCalculatrice extends CalculatriceView implements ActionListener {
     
    	private JFrame frame=null;
    	private JPanel contentPane=null;
    	private JSpinner spinner=null;
    	private SpinnerNumberModel spinnerModel=null;
    	private JButton button =null;
     
     
    	public JFrameSpinnerCalculatrice(CalculatriceController controller) {
    		this(controller,0,0);
    		// TODO Auto-generated constructor stub
    	}
     
     
    	public JFrameSpinnerCalculatrice(CalculatriceController controller, int resultat,int stock) {
    		// TODO Auto-generated constructor stub
    		super(controller);
     
    		buildFrame(resultat,stock);
     
    	}
     
    	public void buildFrame(int resultat , int stock)
    	{
    		frame=new JFrame();
     
    		contentPane=new JPanel();
    		spinnerModel =new SpinnerNumberModel(stock,0,100,1);
     
    		spinner=new JSpinner (spinnerModel);
    		contentPane.add(spinner);
     
    		button=new JButton("Mettre a jour");
    		button.addActionListener(this);
    		contentPane.add(button);
     
    		frame.setContentPane(contentPane);
    		frame.setTitle("JFrameSpinnerVolume");
    		frame.pack();
     
    	}
     
    	@Override
    	public void close() {
    		// TODO Auto-generated method stub
    		frame.dispose();
    	}
     
    	@Override
    	public void display() {
    		// TODO Auto-generated method stub
    		frame.setVisible(true);
    	}
     
    	public void StockChanged(StockChangedEvent event) {
    		// TODO Auto-generated method stub
    		spinnerModel.setValue(event.getNewStock());
    	}
     
    	@Override
    	public void actionPerformed(ActionEvent arg0) {
    		// TODO Auto-generated method stub
    		getController().notifyStockChanged(spinnerModel.getNumber().intValue());
    	}
     
    	@Override
    	public void resultatChanged(ResultatChangedEvent event) {
    		// TODO Auto-generated method stub
    		spinnerModel.setValue(event.getNewResultat());
    	}
     
    	@Override
    	public void stockChanged(StockChangedEvent event) {
    		// TODO Auto-generated method stub
    		spinnerModel.setValue(event.getNewStock());
    	}
    }
    Le changedEvent pour resultat:
    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
    import java.util.EventObject;
     
    public class ResultatChangedEvent extends EventObject {
     
    	private int newResultat;
     
    	public  ResultatChangedEvent(Object source ,int newResultat) {
    		// TODO Auto-generated method stub
    		super(source);
    		this.newResultat=newResultat;
     
    	}
     
    	public int getNewResultat(){
    		return newResultat;
    	}
     
    }
    Le listener de resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import java.util.EventListener;
     
    public interface ResultatListener extends EventListener {
     
    	public void resultatChanged(ResultatChangedEvent event);
     
     
    }
    le changedevent de stock:
    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
    import java.util.EventObject;
     
    public class StockChangedEvent extends EventObject {
     
    	private int newStock;
     
    	public  StockChangedEvent(Object source ,int newStock) {
    		// TODO Auto-generated method stub
    		super(source);
    		this.newStock=newStock;
    	}
     
    	public int getNewStock(){
    		return newStock;
    	}
    }
    Et le listener de stock:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import java.util.EventListener;
     
    public interface StockListener extends EventListener {
     
    	public void stockChanged(StockChangedEvent event);
    }

    Merci d'avance ^^.

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, tu devrais isoler les parties intéressantes de ton code pour ton problème.

    La masse d'informations que tu donnes fait une surcharge et ne pousse pas vraiment à mettre les mains dedans.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 41
    Par défaut
    C'est ce que j'ai fais je pense que le problème vient du Model je l'ai meme commenté 2 fois et j'ai mis tout le code qui suit au cas ou si j'avais tort de me concentrer sur cette partie alors que le problème vient d'ailleurs.

    [Edit]
    j'ai resolu mon probleme
    en fait c'etait le controleur,j'avais mis des tout les listeners partout mais c'est bizarre que ca marchait pas a cause de ça vu que j'utilisais bien les bonnes méthodes oO.

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

Discussions similaires

  1. Tutoriel MVC : Action "supprimer" does not exist
    Par Invité dans le forum MVC
    Réponses: 8
    Dernier message: 05/04/2011, 17h18
  2. Tutoriel java Micro édition : MVC
    Par waeselynck.raphael dans le forum Java ME
    Réponses: 3
    Dernier message: 10/02/2009, 09h28
  3. Réponses: 0
    Dernier message: 11/02/2008, 09h54
  4. Tutoriel : Implémentation du pattern MVC
    Par Ricky81 dans le forum MVC
    Réponses: 0
    Dernier message: 11/02/2008, 09h51
  5. Réponses: 0
    Dernier message: 11/02/2008, 09h49

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