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

 Java Discussion :

Communication entre 2 objets, impossible


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Par défaut Communication entre 2 objets, impossible
    Bonjour à tous,

    Je vous explique mon problème : J'ai comme projet universitaire de crée une application très basique qui se contente de crée des formes géométriques sur une fenêtre de rendu.
    Le problème ( en faite il a y 2 problèmes ) est que n'arrive pas à faire communiquer la fenêtre IHM qui demande des infos sur un point par exemple avec la fenêtre de rendu. J'ai toast de crée un pattern Observer sans succès car l’objet qui observe et aussi celui qui se modifie et là je test de tout mettre dans une class avec moult class interne et autres forfanteries mais de là née un autre problème : l'ActionListener du bouton pour valider ne fait strictement rien ( pour tester j'ai mis un System.exits(0)... )

    Voici le code finalement réuni et je ne vois pas comment je peux me sortir de se bourbier...

    En vous remerciant grassement d'avance,

    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
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    package fr.julien.graphique.lancement;
     
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import fr.julien.graphique.lancement.ObservablePoint;
    import fr.julien.graphique.lancement.ObservateurPoint;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import javax.swing.Box;
    import javax.swing.BoxLayout;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    import fr.ihm.projet.te.FenetreIHM;
    import fr.ihm.projet.te.FenetrePoint;
    import fr.julien.graphique.Graphique;
    import fr.julien.graphique.ZoneGraphique;
    import fr.julien.graphique.axes.AxeX;
    import fr.julien.graphique.axes.AxeY;
    import fr.julien.graphique.axes.OptionAxe;
    import fr.julien.graphique.element.forme.Cercle;
    import fr.julien.graphique.element.forme.OptionForme;
    import fr.julien.graphique.element.forme.Polygone;
    import fr.julien.graphique.element.point.Point;
    import fr.julien.graphique.element.quadrillage.Quadrillage;
     
    public class Test {
     
     
     
    	private Rendu rendu = new Rendu();
     
    	public Test() {
     
    		JButton ok1;
     
    		/********************************** FENETRE IHM *************************************************/
    		JFrame fenetreihm = new JFrame();
    		JPanel panelihm = new JPanel();
     
    		fenetreihm.setTitle("Tableau de Bord");
    		Dimension tailleEcran = java.awt.Toolkit.getDefaultToolkit()
    				.getScreenSize();
    		int hauteur = (int) tailleEcran.getHeight() - 40;
    		int largeur = ((int) tailleEcran.getWidth() - 2) / 2;
    		fenetreihm.setSize(largeur, hauteur);
    		fenetreihm.setLocation(0, 0);
    		fenetreihm.setVisible(true);
     
    		JButton point = new JButton(".");
    		point.addActionListener(new ActionListener() {
     
    			@Override
    			public void actionPerformed(ActionEvent arg0) {
    				// TODO Auto-generated method stub
    				FenetrePoint fenP = new FenetrePoint();
    			}
    		});
     
    		JButton rectangle = new JButton("[]");
     
    		JButton triangle = new JButton("Tri");
     
    		JButton cercle = new JButton("O");
     
    		JButton custom = new JButton("Pers.");
     
    		point.setBounds(20, 175, 70, 70);
    		fenetreihm.add(point);
    		rectangle.setBounds(20, 275, 70, 70);
    		fenetreihm.add(rectangle);
    		triangle.setBounds(20, 375, 70, 70);
    		fenetreihm.add(triangle);
    		cercle.setBounds(20, 475, 70, 70);
    		fenetreihm.add(cercle);
    		custom.setBounds(20, 575, 70, 70);
    		fenetreihm.add(custom);
     
    		fenetreihm.setLayout(null);
    		/**************************************************************************************************/
    		/******************************************** RENDU ******************************************************/
    		class Rendu extends JFrame {
     
    			public Rendu() {
     
    				this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    				OptionAxe optionsAxes = new OptionAxe(Color.BLACK, true, -1, 1,
    						true, true);
    				Graphique.getInstance().initGraphique(
    						new AxeX(-1, 10, optionsAxes),
    						new AxeY(-1, 10, optionsAxes));
    				Graphique.getInstance().ajouterElement(new Quadrillage(1, 1));
     
    				this.add(new ZoneGraphique());
    				this.pack();
     
    				this.setLocationRelativeTo(null);
    				this.setVisible(true);
    			}
     
    			public void dessinePoint(int a, int b) {
     
    				Graphique.getInstance().ajouterElement(new Point('A',a, b));
    				this.add(new ZoneGraphique());
    				this.pack();
    				this.repaint();
     
    			}
     
    		}
     
    		/**************************************************************************************************/
     
    		/************************************** CLASS INTERNE ************************************************************/
    		class FenetrePoint extends Test {
     
    			JTextField xlog = new JTextField();
    			JTextField ylog = new JTextField();
    			JFrame fenPoint = new JFrame();
     
    			public FenetrePoint() {
    				fenPoint.setTitle("Nouveau Point");
    				fenPoint.setSize(450, 300);
    				fenPoint.setLocationRelativeTo(null);
    				fenPoint.setVisible(true);
    				Dimension size = new Dimension(10, 10);
    				JPanel p = new JPanel();
    				fenPoint.add(p);
    				p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
    				JPanel p1 = new JPanel();
    				JPanel p2 = new JPanel();
    				JPanel p3 = new JPanel();
    				p.add(p1);
    				p.add(p2);
    				p.add(p3);
    				p1.setLayout(new BoxLayout(p1, BoxLayout.X_AXIS));
    				p2.setLayout(new BoxLayout(p2, BoxLayout.X_AXIS));
    				p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));
     
    				/*************************** COORDONNEE X ******************************/
    				JLabel x = new JLabel("X: ");
     
    				xlog.setMaximumSize(new Dimension(175, 22));
    				p1.add(x);
    				p1.add(Box.createRigidArea(new Dimension(27, 10)));
    				p1.add(xlog);
     
    				/*************************** COORDONNEE Y ******************************/
    				JLabel y = new JLabel("Y: ");
     
    				ylog.setMaximumSize(new Dimension(175, 22));
    				p2.add(y);
    				p2.add(Box.createRigidArea(new Dimension(27, 10)));
    				p2.add(ylog);
     
    				/*************************** COMMANDE ******************************/
    				JButton ok = new JButton("OK");
     
    				ok.addActionListener(new ActionListener() {
     
    					@Override
    					public void actionPerformed(ActionEvent e) {
    						// TODO Auto-generated method stub
    						/*int xp = Integer.valueOf(xlog.getText()).intValue();
    						int yp = Integer.valueOf(ylog.getText()).intValue();
    						Rendu lol;
    						lol = new Rendu();
    						lol.dessinePoint(2, 2);*/
     
    						System.exit(0);
    					}
    				});
     
    				JButton annuler = new JButton("Annuler");
    				p3.add(ok);
    				p3.add(Box.createRigidArea(size));
    				p3.add(annuler);
    			}
     
    		}
     
    		/**************************************************************************************************/
     
    	}
     
    	public Rendu getRendu() {
    		return this.rendu;
    	}
     
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il doit même pas compiler ton code : tu as créés des classes locales au constructeur de la classe Test (Rendu et FenetrePoint), alors que tu les instancies comme variables de classes. D'après le commentaire tu voulais les faire probablement internes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Exemple {
     
       private ClassInterne machin = new ClassInterne();
     
     
       private class ClassInterne {
       }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Exemple {
    
       private ClassLocale machin = new ClassLocale (); // NE COMPILE PAS, PARCE QUE LA CLASSE N'EXISTE QUE DANS LA METHODE methode
    
       public void methode() { // c'est pareil si c'est le constructeur au lieu d'une méthode
    
          class ClassLocale {
          }
    
          ClassLocale truc = new ClassLocale(); // ça, oui, on peut
    
       }
    
    }
    Plutôt que de faire des classes internes, de toute manière, fait plutôt des classes normales, ça te simplifiera la vie, en évitant de trop surcharger en code une classe. Ensuite, qu'en tu auras plus l'habitude, et que ce sera nécessaire, tu pourras faire des classes internes (nécessaire pour isoler du code, éventuellement réutilisable, mais que la classe interne n'a aucun sens en dehors de sa classe englobante, et ne pourrais pas être utilisée en dehors de toute manière.

    Ensuite, le moyen le plus simple pour communiquer entre 2 instances d'objets, UI ou pas, est encore d'avoir une instance de classe en commun qui permet de communiquer. Pour commencer simple. Ensuite, tu pouras étudier comment mettre en place un système évènementiel (comme un observeur), à partir de ce que tu as déjà fait si tu veux.

    Par exemple :

    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
    public class FrameController {
     
       private JFrame fenetreTruc;
       private JFrame fenetreMachin;
     
       public JFrame getFenetreTruc(boolean ouvrir) {
            if ( fenetreTruc==null && ouvrir) {
                 fenetreTruc = new FenetreTruc(this);
            }
            return fenetreTruc;
       }
     
       public JFrame getFenetreMachin(boolean ouvrir) {
            if ( fenetreMachin==null && ouvrir) {
                 fenetreMachin = new FenetreMachin(this);
            }
            return fenetreMachin;
       }
     
    }
    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
    public class FenetreTruc {
     
        public FenetreTruc(FrameController controller) {
            ...
     
            this.controller=controller;
     
     
            // ici on peut créer un bouton qui va un truc sur l'autre fenêtre :
     
            button = new JButton("Ouvrir en grand...");
            ...addd(button, ...);
            button.addActionListener(new ActionListener () {
                   public void actionPerformed(ActionEvent event) {
                       controller.getFenetreMachin(true).setExtendedState(JFrame.MAXIMIZED_BOTH); // par exemple
                   }
            }
     
        }
     
        private void methodExemple() {
     
            // cette méthode met un texte dans un champ de saisie de l'autre fenêtre
     
            controller.getFenetreMachin(true).setFieldText("truc");
     
        }
     
    }
    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
    public class FenetreMachin {
     
        private JTextField field;
     
        public FenetreMachin(FrameController controller) {
            ...
            this.controller=controller;
        }
     
        public void setFieldText(String text) {
              field.setText(text);
        }
     
         private void methodExemple() {
     
            // cette méthode ferme l'autre fenêtre
     
            FenetreTruc fenetreTruc = controller.getFenetreTruc(false);
     
           if ( fenetreTruc!=null ) {
                fenetreTruc.dispose();
           }
     
        }
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Par défaut
    Oh ! Merci Maitre ! Je test ça de suite. J'aurais jamais eu l'idée de mettre un objet commun dans les constructeurs

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 46
    Par défaut
    YEESSSSS , it works !!! Merci encore !

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

Discussions similaires

  1. Communication entre deux classes impossible
    Par juyn89 dans le forum Langage
    Réponses: 1
    Dernier message: 30/06/2012, 18h52
  2. Communication entre mes pages impossible (fichier.do)
    Par Thomas77380 dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 21/04/2011, 11h56
  3. Communication entre les objets
    Par Dani3L dans le forum C++
    Réponses: 19
    Dernier message: 11/06/2008, 21h50
  4. Communication entre objet
    Par Nasky dans le forum Langage
    Réponses: 1
    Dernier message: 27/05/2006, 21h13

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