Comment recuperer 1 valeur d une boite de dialogue pour l' utiliser dans frame

cs_papse Messages postés 51 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 8 mars 2011 - 31 mai 2008 à 17:03
cs_papse Messages postés 51 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 8 mars 2011 - 3 juin 2008 à 19:24
Bonjour

Quelqu'un pourait lme dire comment recuperer  1 valeur saisie dans un jTextField d une JDialog ouvrable a partir d'un frame (fenetre principale ) pour  utiliser cette valeur recuperée dans le meme frame comme argument d'un objet
ex   r = valeur recuperée;
       Sphere sphere = new Sphere(r);

Merci d'avance

12 réponses

cs_papse Messages postés 51 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 8 mars 2011
1 juin 2008 à 06:04
Bonsoir

C'est parceque j'ai fait mais ça n'a pas marché
Voila coment j'ai fais. Pouvez vous me dire ce qui menque

le jBouton permet de recuperer la valeur et de fermer la boite de dialogue

public class MyjDialog extends JDialog {
............
private JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setBounds(new Rectangle(22, 218, 85, 25));
            jButton.setText("Valider");
            jButton.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    v1 = Float.parseFloat(jTextField.getText());
                    dispose();
                }
            });
        }
        return jButton;
    }              .................
}

Dans le Frame
public class MyFtame extends JFrame  {
....................
private JButton getJButton1() {
        if (jButton1 == null) {
            jButton1 = new JButton();
            jButton1.setText("     Y     ");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                     MyjDialog ob;
                    float v = ob.v1;
                   contents.addChild(new Sphere(0.45f, appearance));                  
                }
            });
        }
        return jButton1;
    }

Merci
0
Utilisateur anonyme
1 juin 2008 à 08:32
Bonjour
Je te conseille de débugger toi-même parce qu'à première vue, le bout de code que tu me montres est correct. Place un point de debug là où tu es sensé récupérer le contenu du champ de texte (v1 Float.parseFloat(jTextField.getText());) et un autre point de debug là où tu veux te servir de cette valeur (float v ob.v1;). Vérifie que c'est bien le même objet dont tu manipules un attribut de type float dans les deux cas.

0
cs_papse Messages postés 51 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 8 mars 2011
1 juin 2008 à 21:12
Bonsoir

A propos du code ci dessus je rectifie l'instruction suivante ; au lieu de
                                                    contents.addChild(new Sphere(0.45f, appearance));                 
                         c'est ceci :            contents.addChild(new Sphere( r, appearance));        

En fait si si je mets         float r = 0.4f ;
                                     contents.addChild(new Sphere(0.45f, appearance));     
                 ça marche sans probleme
Par contre si je mets        float v = ob.v1;
                                       contents.addChild(new Sphere( v1 , appearance));
                 ça ne marche pas

Par ailleurs comment peut on placer un point de debug là où je suis sensé récupérer le contenu du champ de texte (v1 = Float.parseFloat(jTextField.getText());        ?
 
0
Utilisateur anonyme
2 juin 2008 à 07:05
Bonjour

Tu prends ton IDE favori (Eclipse par exemple), tu te mets en mode debug et tu places tes points de debug. Si tu ne peux pas faire ça, mets des affichages là où tu es sensé passer pour voir ce qui se passe. Par exemple, juste avant d'appeler dispose(), tu peux mettre System.out.println("v1="+v1);, tu verras ainsi si cette valeur est bien mise à jour, ça te permettra de mieux cerner la cause du problème.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_papse Messages postés 51 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 8 mars 2011
2 juin 2008 à 21:26
Bonsoir

J'ai mis un point de debug au niveau de ma Boite de Dialog  ça ne pose pas probleme; la valeur est b1 prise en compte
Le probleme reside au niveau de la recuperation de cette valeur dans la fenetre (Frame)
          j'ai mis      :      h = objet1.v1 ;
et j'ai debuger et voici l'erreur qui s'affiche

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at com.simudk.SIMUDK$4.actionPerformed(SIMUDK.java:380)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
0
Utilisateur anonyme
2 juin 2008 à 22:04
Bonsoir

Ca veut tout simplement dire que dans SIMUDK.java à la ligne 380 tu appelles une méthode sur un objet nul. objet1 doit être à null, c'est pour ça que ça ne marche pas. Il faut que tu lui affectes quelque chose.

0
cs_papse Messages postés 51 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 8 mars 2011
2 juin 2008 à 22:24
Bonsoir

Avant j'avai instancier ainsi :              Cylindre objet1;
et j'ai changé aissi                              Cylindre objet1 = new Cylindre(null);
et apres debug ça n'affiche aucune erreur mais la  valeur retournée de v1 par :
                                        h = objet1.v1;
                                        System.out.println("v1="+h);
   est nulle (v1=0.0) dans Frame alors que dans Dialog ça affiche v1=0.54
0
Utilisateur anonyme
3 juin 2008 à 07:08
Bonjour
C'est normal. Quand tu fais Cylindre objet1 new Cylindre(null);, tu crées un nouvel objet et apparemment, objet1 dans Frame est différent de objet1 dans Dialog parce que ce sont deux objets différents alors que toi tu voudrais que ce soit le même. Supposons que tu fais Cylindre objet1 new Cylindre(null); dans la Frame, si tu veux y accéder depuis Dialog, tu peux faire un accesseur. Tu peux déclarer objet1 comme attribut de la classe qui étend Frame si ce n'est pas déjà le cas utiliser cet objet depuis ta classe qui étend Dialog via une référence à ta Frame:
public class MyFtame extends JFrame  {
       Cylindre objet1;
       .....
       MyFtame(){
              objet1 = new Cylindre(null);
              .....
       }
       ....
}

public class MyjDialog extends JDialog {

         MyFtame frame;
         ......
         MyjDialog(MyFtame frame){
                   this.frame=frame;
                   ......
         }
         private JButton getJButton1() {
                 if (jButton1 == null) {
                        jButton1 = new JButton();
                           jButton1.setText("     Y     ");
                         jButton1.addActionListener(new java.awt.event.ActionListener() {
                        public void actionPerformed(java.awt.event.ActionEvent e) {
                              float v = frame.objet1.v1;
                               contents.addChild(new Sphere(v, appearance));                  
                }
            });
        }
        return jButton1;
    }
         ....
}
      

0
cs_papse Messages postés 51 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 8 mars 2011
3 juin 2008 à 15:24
Bonsoir

Tu trouveras ci-dessous mon code  avec une precision avec du texte coloré sur ce que je veux faire
Important : SIMUDK : n'est que la classe de ma fenetre
                   Cylindre : n'est que le nom de la class de ma boite de dialogue
mes questions sont en rouge

Ce code est celui de ma fenetre

public class SIMUDK extends JFrame  {

    Cylindre objet1;
    ..........................................
    private JButton getJButton() {
        if (jButton = = null) {
            jButton = new JButton();
            jButton.setText("     X     ");   
            jButton.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    h = objet1.v1;      //  ? cette valeur v1 entrée dans Cylindre(ma boite de dialogue) , je veux la  récupérer ici pour pouvoir l'utilisée ici
                   
                    System.out.println("v1="+h);
                    contents.addChild((javax.media.j3d.Node)  new ColorCube( h ));
                }
            });
        }
        return jButton;
    }
...........................................................................
}

Ci dessous est le code de boite de Dialogue Cylindre

public class Cylindre extends JDialog {

public float v1 ;
........................................................................................
private JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setBounds(new Rectangle(22, 218, 85, 25));
            jButton.setText("Valider");
            jButton.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    // Je veux entrée la valeur de v1 ici et la recupérer dans ma  fenetre (SIMUDK)
                    v1 = Float.parseFloat(jTextField.getText());
                    System.out.println("v1="+v1);
                   hide();
                }
            });
        }
        return jButton;
..............................................................
    }
0
Utilisateur anonyme
3 juin 2008 à 15:53
public class SIMUDK extends JFrame  {

    Cylindre objet1;

    SIMUDK(){
            objet1 = new Cylindre();//c'est sûr que si tu instancies pas ton attribut, tu auras une NullPointerException
            objet1.setVisible(true);//rend ta JDialog visible
    .............
    }

    ..........................................
    private JButton getJButton() {
        if (jButton == null) {
            jButton = new JButton();
            jButton.setText("     X     ");   
            jButton.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent e) {
                    h = objet1.v1;                   
                    System.out.println("v1 ="+h);
                    contents.addChild((javax.media.j3d.Node)  new ColorCube( h ));
                }
            });
        }
        return jButton;
    }
...........................................................................
}

Ca devrait suffire.

0
cs_papse Messages postés 51 Date d'inscription samedi 3 novembre 2007 Statut Membre Dernière intervention 8 mars 2011
3 juin 2008 à 19:24
Bonsoir [auteur/GOUESSEJ/684669.aspx gouessej]

Je commence par te remercier de ton aide, maintenant je crois que ça marche.
Je voulais en plus de recuperer la valeur, gerer l'affichage de Cylindre par un click sur un jMenuItem puis saisir la valeur dans le jTextField et Cylindre se ferme apres validation tout en gardant en memoire la valeur saisie. Et tous marchent à l'amiable.
Merci encore de plus.
0
Utilisateur anonyme
31 mai 2008 à 22:48
Bonsoir

Ca t'arrive de jeter un coup d'oeil dans la documentation Java avant de poser une question comme ça?

public StringgetText()

Returns the text contained in this
TextComponent
.
If the underlying document is
null
,
will give a
NullPointerException
.

Note that text is not a bound property, so no
PropertyChangeEvent
is fired when it changes. To listen for changes to the text,
use
DocumentListener
.

<dd><dl> * Returns: : <dd>the text
* Throws: : <dd>
NullPointerException
- if the document is
null
* See Also: : <dd>
setText(java.lang.String)

</dd></dl>

-1
Rejoignez-nous