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

avec Java Discussion :

Récupérer les données dans un JTextField .


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut Récupérer les données dans un JTextField .
    Bonjour,

    Je découvre JAVA. J'ai utilisé divers outils de programmation (non objet !) et je me fais des noeuds dans la tête car je suis très loin de "penser en JAVA" !

    J'essaie de refaire une application dont je connais bien toute la partie calcul (elle fonctionne sur un PALM), les forums, didacticiels et autres livres m'ont appris plein de choses mais je bute sur un truc qui ne me semblait pas cacher de difficulté.

    Le petit bout de code qui suit fonctionne parfaitement, il dessine une aiguille orientée en fonction d'un angle qui est saisi.
    J'ai prévu un champ JTextField pour saisir cet angle et je suis incapable de le récupérer.
    J'ai pourtant utilisé ce type d'objet dans plusieurs autres applications réalisées au fil des tutoriels, mais là, je coince.

    J'ai vérifié que le listener du champ fonctionnait car il déclenche les opérations si on modifie sa valeur (comme un clic sur le bouton).
    Mais, la valeur vRoute n'est pas accessible dans l'ActionPerformed ou dans la définition de la classe Panneau.
    Je vous fais grâce de toutes mes tentatives qui auraient certainement leur place au musée des horreurs ...
    Voici le code, les routines sont dans une classe à part et non représentées.

    Merci de vos lumières ....

    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
     import javax.swing.* ;
     
    import java.awt.* ;
    import java.awt.event.* ;
    import java.util.Scanner;
    @SuppressWarnings("serial")
     
    class MaFenetre extends JFrame implements ActionListener
    { 
    	MaFenetre ()
      { 
    	setTitle ("Dessiner aigguille avec repaint") ;
        setSize (400, 500) ;
        Container contenu = getContentPane() ;
           // creation paneau pour le dessin
        pan = new Panneau() ;
        pan.setBackground (Color.cyan) ;
     
        JTextField vRoute = new JTextField (); // <-- pour saisir le cap
        vRoute.setText("000");
        pan.add(vRoute);
        vRoute.addActionListener (this) ;
        contenu.add(pan) ;
           // crÈation bouton "Aiguille"
        aig = new JButton ("Aiguille") ;
        contenu.add(aig, "South") ;
        aig.addActionListener (this) ;    
      }
      public void actionPerformed (ActionEvent ev)
      {
        pan.repaint() ;   // pour forcer la peinture du paneau des maintenant
      }
      private Panneau pan ;
      private JButton aig ;
    }
    class Panneau extends JPanel
    { 	 
    	public void paintComponent(Graphics g)
     
      { 
    	super.paintComponent(g) ;
    	//saisie clavier du cap car je n'arrive pas à récupérer la valeur de vRoute du JTextField
      	Scanner lectureClavier = new Scanner(System.in);
      	System.out.print("Entrez la route : ");
    	double capRose = lectureClavier.nextDouble();
     
      	capRose = Routines.roseToTrigo(capRose); // routine de changement de repaire pour les angles
      	int[] tabPoints  = new int[10];
    	tabPoints = Routines.calcPoints(capRose); // calcule les points permettant de dessiner l'aiguille
    	g.drawLine(tabPoints[0],tabPoints[1], tabPoints[8], tabPoints[9]);
        g.drawLine(tabPoints[8],tabPoints[9], tabPoints[2], tabPoints[3]);
        g.drawLine(tabPoints[2],tabPoints[3], tabPoints[4], tabPoints[5]);
        g.drawLine(tabPoints[4],tabPoints[5], tabPoints[6], tabPoints[7]);
        g.drawLine(tabPoints[6],tabPoints[7], tabPoints[0], tabPoints[1]);
      }
    }
     
    public class Repaint
    { public static void main (String args[])
      {
    	MaFenetre fen = new MaFenetre() ;
        fen.setVisible(true) ;
      }
    }

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Tou d'abord, quand on met du code, on le met entre des balises [ CODE] pour que ça soit plus lisible, merci

    Sinon, je pense que cela devrait faire l'affaire:


  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    Bonjour et merci Deaf,

    J'ai ajouté les balises [ code] & [ /code], désolé.

    Je connais (enfin, si on peut dire !) et j'ai déjà utilisé getText() ...
    Je pense que le problème réside dans la portée de vRoute qui n'est pas utilisable aux endroits où cela me serait utile !

  4. #4
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Points : 1 078
    Points
    1 078
    Par défaut
    Alors, voici deux cas de figure possibles:
    - soit tu écoutes et réagis à chaque changement du texte du JTextField
    - soit tu attends un évènement autre (action d'un bouton "Valider" par exemple)

    Dans le premier cas, tu dois mettre un listener sur le document si je me rappelle bien ( vRoute.getDocument().addDocumentListener(...); )
    Ainsi à chaque notification, tu feras ton traitement.

    Dans le second cas, tu faire en sorte que le listener du bouton (ou autre) ait accès à ton JTextField, ou mieux à son Document. Tu peux le faire en lui donnant à l'initialisation ou en le laissant accessible.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 67
    Points : 58
    Points
    58
    Par défaut
    EUREKA !!!!

    La réponse à mon pb est à la fois simple et instructive pour un néophyte de mon genre ...

    Je voyais bien que le le JTextField déclaré dans la classe MaFenetre n'était pas visible à l'endroit où j'en avais besoin, la classe Panneau qui porte le paintComponent(Graphics g) ...
    J'ai tenté d'imbriquer cette dernière dans la première et ECLIPSE ne m'a pas insulté. J'ai déclaré le JTextField vRoute en bonne place et il devient visible .... et ça marche !

    J'utilisais le mot imbriqué avant de rencontrer JAVA mais je viens de voir que des classes imbriquées, on en parle beaucoup !!!!!!
    Cela fait 2 jours que je cherche, je m'en souviendrais ...

    Le code modifié (si peu !) devient :
    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
     
    import javax.swing.* ;
    import java.awt.* ;
    import java.awt.event.* ;
     
    @SuppressWarnings("serial")
    class MaFenetre extends JFrame implements ActionListener
    { 
    	JTextField vRoute = new JTextField ("120");// <-- zone de saisie du cap déclaré au bon endroit !
    	MaFenetre ()
    	{ 
    		setTitle ("Dessiner aigguille avec repaint") ;
    		setSize (400, 400) ;
    		Container contenu = getContentPane() ;
           // creation paneau pour le dessin
    		pan = new Panneau() ;
    		pan.setBackground (Color.cyan) ;    
    		pan.add(vRoute);
    		vRoute.addActionListener (this);
    		contenu.add(pan) ;
           // crÈation bouton "Aiguille"
    		aig = new JButton ("Aiguille") ;
    		contenu.add(aig, "South") ;
    		aig.addActionListener (this) ;
    	}
    		public void actionPerformed (ActionEvent ev)
    	{
    		pan.repaint() ;   // pour forcer la peinture du paneau des maintenant
    	}
    	private Panneau pan ;
    	private JButton aig ; // le bouton ne sert à rien pour l'instant, c'est la saisie qui déclenche l'affichage
     
    	class Panneau extends JPanel
    	{
    		public void paintComponent(Graphics g)
     
    		{ 
    			super.paintComponent(g) ;
    			double capRose = Double.valueOf(vRoute.getText()); // lecture du champ de saisie du cap
    			capRose = Routines.roseToTrigo(capRose); // routine de changement de repaire pour les angles
    			int[] tabPoints  = new int[10];  //création du tableau qui va contenir les coordonnées des 5 points de l'aiguille
    			tabPoints = Routines.calcPoints(capRose); // calcule les points permettant de dessiner l'aiguille
    			g.drawLine(tabPoints[0],tabPoints[1], tabPoints[8], tabPoints[9]);
    			g.drawLine(tabPoints[8],tabPoints[9], tabPoints[2], tabPoints[3]);
    			g.drawLine(tabPoints[2],tabPoints[3], tabPoints[4], tabPoints[5]);
    			g.drawLine(tabPoints[4],tabPoints[5], tabPoints[6], tabPoints[7]);
    			g.drawLine(tabPoints[6],tabPoints[7], tabPoints[0], tabPoints[1]);
    		}
    	}
    }
     
     
    public class Repaint
    { public static void main (String args[])
      {
    	MaFenetre fen = new MaFenetre() ;
        fen.setVisible(true) ;
     
      }
    }
    Merci pour les réponses, sans cet échange je n'aurais probablement pas trouvé, les circonvolutions du cerveau sont encore plus mystérieuses que JAVA !!!!

    Comment fait-on pour indiquer que le problème est résolu ?

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par macRiaz Voir le message
    Comment fait-on pour indiquer que le problème est résolu ?
    en cliquant sur en bas de page, tout simplement.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/05/2008, 12h37
  2. Réponses: 24
    Dernier message: 25/09/2007, 11h53
  3. [VBA-E]Formulaire word, récupérer les données dans excel
    Par sablier dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 30/05/2006, 07h38
  4. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39

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