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

Agents de placement/Fenêtres Java Discussion :

Dialoge entre 2 Jframe


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    Par défaut Dialoge entre 2 Jframe
    slt je dispose de 2 formulaires class A class B.sur A je dispose d'un button me permettant d’appelée B sans pour autant fermer A et j'aimerais pouvoir les contrôles depuis une unique classe: class C après réflexion j'ai définir dans la class C un constructeur pour chacun mais voilà une exception mes levé au lancement de A m'informant d'une anomalie dans sa structure,bref un truc de ce genre.
    voici mon code:

    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
    public class A extends javax.swing.JFrame {
    	    public  A  {
    	        forme();
    	    }
    	    public void forme(){
    	        C mess =new  C(this);
     
    	     //lien de redirection vers le controleur
    	     contact.addActionListener(mess);
    	    }
    	    public static void main(String args[]) {
    	        java.awt.EventQueue.invokeLater(new Runnable() {
    	            public void run() {
    	                new  A ().setVisible(true);
    	            }
    	        });
    	    public javax.swing.JButton contact;	                
     }
     
     
        public class B extends javax.swing.JFrame {
     
    	    public  B() {
    	        forme ();
    	    }
            public void forme () {
               C message =new C (this);
    	     //lien de redirection vers le controleur
    	     envoyer.addActionListener(message);
            }
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new B().setVisible(true);
                }
            });
        }
        public javax.swing.JButton envoyer;
    }
     
    		public class C  implements ActionListener {
    		  private A mur=null;
              private B mess=null;
     
    		  public C(A  mes){
    			   mur=mes;
    			   mess=new B();
    		}
    		public C(B messag){
    			   mess=messag;
    			   mur=new A();
    		}
     
    	    public void actionPerformed(ActionEvent e)  {
    	       Object ob=(Object)e.getSource();
     
    	       if(ob.equals(mur.contact)){
    	          System.out.println("lancement classe B");
    	           mess.setVisible(true);
    	      }
    	       if(ob.equals(lemessage.envoyer)){
    	            System.out.println("classe B lance avec succès");
     
    	       }   
    	      } 
    	}
    Extrait de la Trace
    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
      Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
            at sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:259)
            at sun.swing.SwingUtilities2.getFontMetrics(SwingUtilities2.java:933)
            at javax.swing.JComponent.getFontMetrics(JComponent.java:1599)
            at javax.swing.text.PlainView.calculateLongestLine(PlainView.java:613)
            at javax.swing.text.PlainView.updateMetrics(PlainView.java:192)
            at javax.swing.text.PlainView.setSize(PlainView.java:464)
            at javax.swing.plaf.basic.BasicTextUI$RootView.setSize(BasicTextUI.java:1702)
            at javax.swing.plaf.basic.BasicTextUI.getPreferredSize(BasicTextUI.java:905)
            at javax.swing.plaf.basic.BasicTextAreaUI.getPreferredSize(BasicTextAreaUI.java:103)
            at javax.swing.JComponent.getPreferredSize(JComponent.java:1634)
            at javax.swing.JTextArea.getPreferredSize(JTextArea.java:617)
            at javax.swing.text.JTextComponent.getPreferredScrollableViewportSize(JTextComponent.java:1959)
            at javax.swing.JTextArea.getPreferredScrollableViewportSize(JTextArea.java:694)
            at javax.swing.ViewportLayout.preferredLayoutSize(ViewportLayout.java:75)
            at javaapplication1.C.<init>(C.java:30)
            at javaapplication1.B.forme(B.java:30)
            at javaapplication1.B.<init>(B.java:26)
            at javaapplication1.C.<init>(C.java:26)
            at javaapplication1.A.forme(A.java:27)
            at javaapplication1.A.<init>(A.java:23)
            at javaapplication1.C.<init>(C.java:30)
            at javaapplication1.B.forme(B.java:30)
            at javaapplication1.B.<init>(B.java:26)
            at javaapplication1.C.<init>(C.java:26)
            at javaapplication1.A.forme(A.java:27)
            at javaapplication1.A.<init>(A.java:23)
            at javaapplication1.C.<init>(C.java:30)
            at javaapplication1.B.forme(B.java:30)
            at javaapplication1.B.<init>(B.java:26)
            at javaapplication1.C.<init>(C.java:26)
            at javaapplication1.A.forme(A.java:27)
            at javaapplication1.A.<init>(A.java:23)
            at javaapplication1.C.<init>(C.java:30)
            at javaapplication1.B.forme(B.java:30)
            at javaapplication1.C.<init>(C.java:26)
            at javaapplication1.C.<init>(C.java:26)
            at javaapplication1.A.forme(A.java:27)
            at javaapplication1.A.<init>(A.java:23)
            at javaapplication1.C.<init>(C.java:30)
            at javaapplication1.B.forme(B.java:30)
            at javaapplication1.B.<init>(B.java:26)
            at javaapplication1.C.<init>(C.java:26)
            at javaapplication1.A.forme(A.java:27)
            at javaapplication1.A.<init>(A.java:23)
            at javaapplication1.C.<init>(C.java:30)
            at javaapplication1.B.forme(B.java:30)
            at javaapplication1.B.<init>(B.java:26)
            at javaapplication1.C.<init>(C.java:26)
            at javaapplication1.A.forme(A.java:27)
            at javaapplication1.A.<init>(A.java:23)
            at javaapplication1.C.<init>(C.java:30)
    Ainsi ma préoccupation est la suivante :
    1)Est ce un problème de compréhension,mon idée de base n'est telle pas correcte?
    2) que faire?
    3)toute aide,idée ou conseil serait la bienvenue.
    a++

  2. #2
    Membre expérimenté Avatar de Mamypirate
    Homme Profil pro
    Samouraï
    Inscrit en
    Mai 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Samouraï
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2011
    Messages : 108
    Par défaut
    Déjà, premier point, je ne comprend pas pourquoi tu as plusieurs main() ? Le main() n'est pas appelé lors de la construction d'un objet !

    Après, en ce qui concerne ton erreur, tu as une boucle dans la création de tes objets qui provoque le "StackOverflowError".
    Lors de la création de A par exemple, un objet C est créé qui créé un objet B qui créé un objet C qui créé un objet A, etc ...

    Il doit y avoir d'autres problèmes dans ta conception, cela me semble bien compliqué ...

    Essai déjà de régler ton erreur et on verra pour la suite

    Bon courage !

  3. #3
    Membre très actif
    Homme Profil pro
    SAQ
    Inscrit en
    Novembre 2005
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : SAQ
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 167
    Par défaut
    Il y a effectivement un cycle dans tes créations d'objets
    voilà ce qui, je pense, devrait être bon

    Code JAVA : 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
     
     
    public class Ecouteur implements ActionListener {
     private ArrayList<Component> composantsEcoutes=null; 
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		Component evtSrc=(Component)e.getSource();
    	    if(composantsEcoutes.contains(evtSrc)){
    	    	Logger.getAnonymousLogger().info("Évènement lancé"+e.getActionCommand()+" par: " +evtSrc.getName());
    	    }	
    	}
     
    	public void enregistrerComposant(Component c) {
    		if(composantsEcoutes==null)composantsEcoutes=new ArrayList<Component>();
     
    		composantsEcoutes.add(c);
    		if(c instanceof JFrame){
    			JFrame f=(JFrame)c;
    			for (Component sousComp :f.getContentPane().getComponents()) {
    				//il manque un truc sur lequel je ne retombe pas... j'y reviendrai
    			}
    		}
    		String nomDuComposant=c.getName();
    	 Logger.getAnonymousLogger().info("composant ajouté à la liste d'écoute:"+nomDuComposant);
     
    	}
     
    }
    ....
     
    public class Main {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
           Ecouteur ecouteur=new Ecouteur();
           Frame1 frame1=new Frame1();
           frame1.setName("A");
           ecouteur.enregistrerComposant(frame1);
    	}

  4. #4
    Membre très actif
    Homme Profil pro
    SAQ
    Inscrit en
    Novembre 2005
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : SAQ
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 167
    Par défaut
    Ceci est beaucoup mieux pour avoir un listener d'Event unique

    Code java : 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
     
    public class Ecouteur implements ActionListener {
     
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		Component evtSrc=(Component)e.getSource();
    	    if(composantsEcoutes.contains(evtSrc)){
    	    	Logger.getAnonymousLogger().info("Évènement lancé"+e.getActionCommand()+" par: " +evtSrc.getName());
    	    }	
    	}
     
    	public void enregistrerComposant(Component c) {
    		if(composantsEcoutes==null)composantsEcoutes=new ArrayList<Component>();
     
    		composantsEcoutes.add(c);
     
    		String nomDuComposant=c.getName();
    	 Logger.getAnonymousLogger().info("composant ajouté à la liste d'écoute:"+nomDuComposant);
     
    	}
    	public final synchronized static Ecouteur getInstance(){
    		if(instance==null) instance=new Ecouteur();
    		return instance;
    	}
    	private Ecouteur(){
    		Logger.getAnonymousLogger().info("Acquisition d'un listener");
    	}
    	private ArrayList<Component> composantsEcoutes=null;
    	private static  Ecouteur instance=null;
     
    }

Discussions similaires

  1. Relation entre deux JFrame
    Par sayn1999 dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 08/07/2011, 12h28
  2. Interaction entre 2 JFrame
    Par ratvoleur dans le forum Débuter
    Réponses: 4
    Dernier message: 18/05/2011, 18h53
  3. avancer reculer (entre les JFrame)
    Par clubist dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 12/06/2008, 01h52
  4. Comment transférer des données entre deux JFrame
    Par speos dans le forum Agents de placement/Fenêtres
    Réponses: 6
    Dernier message: 23/04/2007, 16h50
  5. Différence entre Jpanel, JFrame, Frame, Panel
    Par Invité dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 12/06/2006, 23h51

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