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 :

Transmission de variables et évènements


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut Transmission de variables et évènements
    Bonjour à tous !

    Application développée sous Eclipse avec Jigloo.

    Je dois créer une interface graphique dans laquelle je distingue la partie interface (fichier appelé FInterface) de la partie traitement (FTraitement).
    J'implémente de la manière suivante :
    ma fonction Main instancie FTraitement et le constructeur de FTraitement instancie FInterface.

    Première question : Y a-t-il un moyen plus propre pour pouvoir traiter les composants de FInterface dans FTraitement ?

    Deuxième question : J'ai un bouton dans FInterface auquel j'ajoute un évenement clic mais je veux traiter cet évènement dans FTraitement ... une idée ?

    Merci d'avance

    à vous...

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    La réponse : ("MVC" pour la question 1 et Swing pour la question2), et tu trouveras la !

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    Ok, je ne connaissais pas le MVC

    Merci ! je vais me renseigner ... ca m'a pas l'air simple !

  4. #4
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    Ce n'est pas simple mais une fois que tu auras intégrer cela tu seras convaincu qu'il n'est pas raisonnable de concevoir une IHM autrement avec swing : c'est pas du temps perdu

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    Bon, je suis toujours dans l'étude de ce MVC, mais là; j'ai un problème que je n'arrive pas à résoudre...

    Voici le code du Modèle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public void setModel(DefaultComboBoxModel f)
    	{
    		cb_final = f;
    		setChanged();
    		notifyObservers();
    	}
    Et voici le code du contrôleur :

    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
     
    Arr = new ArrayList();
     
    ResultSet Lst_Table;
    Statement Stmt_Lst;
    int i = 0;
     
    Stmt_Lst = (Statement) Connexion.Connec.getConnection().createStatement();
    Lst_Table = (ResultSet) Stmt_Lst.executeQuery("SELECT Libelle_Service FROM service;");
    Arr.add("");
     
    while(Lst_Table.next())
    {
    	Arr.add(Lst_Table.getString(1));
    	i++;
    }
     
    modele.setModel(new DefaultComboBoxModel(Arr.toArray()));
    Et dans ce contrôleur, il me met une erreur à la dernière ligne :
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

    Je suis bloqué, même si ça doit être un truc bidon...

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Août 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2002
    Messages : 44
    Par défaut
    Pour une NullPointer, toujours regarder les points dans la ligne incriminée

    En l'occurence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    modele.setModel(new DefaultComboBoxModel(Arr.toArray()));
    Arr est bien initialisée avant dans ton code mais qu'en est-il de modele ?

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    Voilà ce qu'il y a au dessus du code précédent :

    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
    88
    89
     
    package Planning;
     
    import java.awt.*;
    import java.awt.event.*;
    import java.sql.SQLException;
    import java.util.ArrayList;
     
    import javax.swing.*;
     
    import com.mysql.jdbc.ResultSet;
    import com.mysql.jdbc.Statement;
     
    /* On implémente ActionListener qui permet de traiter les événements du bouton */
    public class Controleur_planning implements ActionListener,WindowListener {
     
    	private Modele_planning modele;
    	private planning vue;
    	private ArrayList Arr;
     
    	public Controleur_planning()
    	{
    		try
    		{
    			Arr = new ArrayList();
     
    			ResultSet Lst_Table;
    			Statement Stmt_Lst;
    			int i = 0;
     
    			Stmt_Lst = (Statement) Connexion.Connec.getConnection().createStatement();
    			Lst_Table = (ResultSet) Stmt_Lst.executeQuery("SELECT Libelle_Service FROM service;");
    			Arr.add("");
     
    			while(Lst_Table.next())
    			{
    				Arr.add(Lst_Table.getString(1));
    				i++;
    			}
     
    			modele.setModel(new DefaultComboBoxModel(Arr.toArray()));
    		}
     
    		catch (SQLException e) {
    			e.printStackTrace();
    		}	
    	}
     
    	/* Permettra de connaitre le modéle */
    	public void setModele(Modele_planning m) {
    		modele=m;
    	}
     
    	/* Permettra de connaitre la vue */
    	public void setVue(planning v) {
    		vue=v;
    	}
     
    	/* C'est ici que l'on traite l'action récupéré : implémentation dut à l'interface ActionListener */
    	public void actionPerformed(ActionEvent e) {
    	}
     
    	/* WindowListener implémentation : pour fermer l'application avec la fenêtre */
    	public void windowActivated(WindowEvent e) {
    	}
     
    	public void windowClosed(WindowEvent e) {	
    	}
     
    	public void windowClosing(WindowEvent e) {
    		System.exit(0);
    	}
     
    	public void windowDeactivated(WindowEvent e) {
    	}
     
    	public void windowDeiconified(WindowEvent e) {
    	}
     
    	public void windowIconified(WindowEvent e) {
    	}
     
    	public void windowOpened(WindowEvent e)  
    	{
    		modele.setModel(new DefaultComboBoxModel(Arr.toArray()));
    	}
     
     
    }

  8. #8
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Août 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2002
    Messages : 44
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Modele_planning modele;
    Ton objet de type Modele_planning est déclaré mais pas instancié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    modele.setModel(new DefaultComboBoxModel(Arr.toArray()));
    Tu appelles une méthode de Modele_planning sur un objet qui n'est pas initialisé... NullPointerException.

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    Au début de mon constructeur du contrôleur, j'avais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		modele=null;
    		vue=null;
    Et comme indiqué dans un tuto MVC, j'ai aussi un main comme suit :

    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
     
    package Planning;
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class Main_planning 
    {
     
    	public Main_planning()
    	{
    		try {
    			UIManager.setLookAndFeel(
    			UIManager.getCrossPlatformLookAndFeelClassName());
    		}
    		catch(Exception e) {
    			System.out.println("Erreur : "+e);
    		}
     
    		/* Contient le modele */
    		Modele_planning modele=new Modele_planning();
     
    		/* Contient la vue */
    		planning vue=new planning();
     
    		/* Contient le controleur */
    		Controleur_planning controleur=new Controleur_planning();
     
    		/* Pour que le controleur connaisse le modele */
    		controleur.setModele(modele);
     
    		/* Pour que le controleur connaisse la vue*/
    		controleur.setVue(vue);
     
    		/* Pour que la vue connaisse le modele */
    		vue.setModele(modele);
     
    		/* Le controleur recevra les action de la vue */
    		vue.setListener(controleur);
     
    		/* La vue observera le modèle */
    		modele.addObserver(vue);
     
    		/* Et bien sure on affiche la vue */
    		vue.affiche();
     
    	}
    }

  10. #10
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Tu es sur que ce que tu veux faire ce n'est pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    setModel(new DefaultComboBoxModel(Arr.toArray()));
    plutot que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    modele.setModel(new DefaultComboBoxModel(Arr.toArray()));

  11. #11
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    Ben non, puisque cette ligne se trouve dans le contrôleur... je suis obligé d'entrer quelque chose du genre " modele. "

  12. #12
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Je vais insister (au risque d'être relou) mais dans ta classe controleur tu a défini une méthode setModele qui te permet d'assigner un modèle à ton controleur (si j'ai bien suivi). Dans le constructeur de ton controleur tu fais un new DefaultComboBoxModel qui te permet de créer ton Modèle (toujours si j'ai bien suivi) donc ce qu'il te faut c'est assigner à ton contructeur le modèle que tu vient de créer (en utilisant la méthode setModel de ton controleur et non celle de ton modèle).

    J'espère que je me fais comprendre (et que j'ai compris ton problème)

  13. #13
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Août 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2002
    Messages : 44
    Par défaut
    Surtout que tu le fais déjà dans ton main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* Contient le modele */
    		Modele_planning modele=new Modele_planning();
     
    		/* Contient la vue */
    		planning vue=new planning();
     
    		/* Contient le controleur */
    		Controleur_planning controleur=new Controleur_planning();
     
    		/* Pour que le controleur connaisse le modele */
    		controleur.setModele(modele);
    Pourquoi le rajouter à nouveau dans ton constructeur du controlleur ?

  14. #14
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    C'est vrai, j'ai peut-être fait une confusion toute bête mais il ne faut pas confondre le modele du combobox et celui du MVC:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    modele.setModel(new DefaultComboBoxModel(Arr.toArray()));
    Ici, le setModel permet de copier le DefaultComboBoxModel dans le modele du MVC...puis je veux tout simplement mettre le modele de ComboBox à jour dans ma ComboBox de la Vue.

  15. #15
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Août 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2002
    Messages : 44
    Par défaut
    Dans ce cas là, au lieu de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		/* Contient le controleur */
    		Controleur_planning controleur=new Controleur_planning();
     
    		/* Pour que le controleur connaisse le modele */
    		controleur.setModele(modele);
    Passe modele directement à ton constructeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Controleur_planning controleur=new Controleur_planning(modele);
    De cette manière, tu pourras faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private Modele_planning modele;
    	private planning vue;
    	private ArrayList Arr;
     
    	public Controleur_planning(Modele_planning m)
    	{
    		try
    		{  
    			Arr = new ArrayList();
                            this.modele = m;
    et ton modele.setModel ne génèrera plus de NullPointer.

  16. #16
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2006
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2006
    Messages : 75
    Par défaut
    Bingo !

    Merci beaucoup, même si je n'ai pas été forcemment très clair et que l'on s'est un peu embrouillé dans la discussion, au final ça fonctionne !

    Bien compliqué tout ça...

    Merci beaucoup !!!

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

Discussions similaires

  1. variable session + événement OnChange
    Par ekinoxe dans le forum ASP
    Réponses: 1
    Dernier message: 07/02/2006, 12h45
  2. [Sécurité] PHP 5 transmission de variables
    Par messier79 dans le forum Langage
    Réponses: 18
    Dernier message: 09/01/2006, 14h05
  3. Transmission de variable avec GET et header
    Par spirou dans le forum Langage
    Réponses: 10
    Dernier message: 03/01/2006, 19h04
  4. [FLASH MX] Transmission de variables entre 2 swf
    Par totoche dans le forum Flash
    Réponses: 3
    Dernier message: 12/10/2005, 15h54
  5. transmission de variables
    Par nicerico dans le forum ASP
    Réponses: 14
    Dernier message: 16/08/2004, 16h20

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