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ération texte JTextField


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Points : 52
    Points
    52
    Par défaut Récupération texte JTextField
    Bonjour,

    J'ai un problème pour récupérer la valeur d'un JTextField saisie par un utilisateur.

    Voici ma classe de test
    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
     
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import java.awt.Rectangle;
     
     
    public class Test_JTextField extends JPanel {
     
    	private static final long serialVersionUID = 1L;
    	public JTextField jTextField_test = null;
     
    	/**
             * This is the default constructor
             */
    	public Test_JTextField() {
    		super();
    		initialize();
    	}
     
    	/**
             * This method initializes this
             * 
             * @return void
             */
    	private void initialize() {
    		this.setSize(517, 227);
    		this.setLayout(null);
    		this.add(getJTextField_test(), null);
    	}
     
    	/**
             * This method initializes jTextField_test      
             *      
             * @return javax.swing.JTextField       
             */
    	public JTextField getJTextField_test() {
    		if (jTextField_test == null) {
    			jTextField_test = new JTextField();
    			jTextField_test.setBounds(new Rectangle(92, 30, 177, 19));
     
    		}
    		return jTextField_test;
    	}
     
    }
    je créer juste une zone de texte

    Voici ma classe Action

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class Action_JTextField implements ActionListener {
    Test_JTextField text =new Test_JTextField();
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		System.out.println("Le texte est "+text.jTextField_test.getText());
     
    	}
     
    }
    et le résultat : le texte est
    En fait je récupère la valeurs par défaut de la zone de texte et non la valeur saisie par l'utilisateur.
    Je ne vois pas d'erreur niveau compilation et, comme je suis débutant, j'aimerais comprendre se qu'il se passe et comment rémédier à ce problème.
    Si vous avez une idée, ou une piste de recherche, ça me soulagerais beaucoup.
    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Salut,

    chacun a ses habitudes quand à la construction d'une interface.
    Il y a de nombreuses façons de procéder.

    J'ai modifié ton code, en essayant de rester fidèle à ton raisonnement.

    Le panel :
    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
    import javax.swing.JPanel;
    import javax.swing.JTextField;
     
    import java.awt.Dimension;
    import java.awt.Rectangle;
     
     
    public class Test_JTextField extends JPanel {
     
    	private static final long serialVersionUID = 1L;
     
    	/**
             * This is the default constructor
             */
    	public Test_JTextField() {
    		super();
    		initialize();
    	}
     
    	/**
             * This method initializes this
             * 
             * @return void
             */
    	private void initialize() {
    		this.setPreferredSize(new Dimension(517, 227));
    		this.setLayout(null);
    		this.add(getJTextField_test(), null);
    	}
     
    	/**
             * This method initializes jTextField_test      
             *      
             * @return javax.swing.JTextField       
             */
    	private JTextField getJTextField_test() {
    		JTextField jTextField_test = new JTextField();
    		jTextField_test.setBounds(new Rectangle(92, 30, 177, 19));
    		jTextField_test.addActionListener(new Action_JTextField());
     
    		return jTextField_test;
    	}
     
    }
    L'ActionListener :
    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
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.JTextField;
     
    public class Action_JTextField implements ActionListener {
     
    	public void actionPerformed(ActionEvent e) {
    		if (e.getSource() instanceof JTextField) {
    			JTextField field = (JTextField) e.getSource();
     
    			System.out.println("Le texte est "+ field.getText());	
    		}		
    	}
     
    }
    Le main :
    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
    import javax.swing.JFrame;
     
    public class Test {
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		frame.setContentPane(new Test_JTextField());
     
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setVisible(true);
    	}
     
    }
    Edit :
    Apprend aussi à te servir des layout, si tu post sur le forum du code avec un layout null, tu vas te faire incendier
    Blague à part, essai quand même d'utiliser des Layout.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    Merci pour la réponse, et pour le conseil concernant les Layout effectivement j'y suis dessus, je souhaite récupérer la valeur saisie par l'utilisateur, lors d'un appuie sur un bouton par exemple donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (e.getSource() instanceof JTextField) {
    			JTextField field = (JTextField) e.getSource();
    ne fonctionnera pas car la source est un bouton et non une zone de texte, je ne l'avais pas préciser , quelle logique faut il appliquer ? pourquoi en instanciant la classe test_jTextField, puis en accédant à l'objet JTextField et en appelant la méthode getText(), ça ne fonctionne pas ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Points : 422
    Points
    422
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class Action_JTextField implements ActionListener {
    Test_JTextField text =new Test_JTextField();
    	@Override
    	public void actionPerformed(ActionEvent e) {
    		System.out.println("Le texte est "+text.jTextField_test.getText());
     
    	}
     
    }
    Ici, tu instancies un Test_JTextField (un JPanel) et l'actionPerforned utilise cette élément pour retourner la valeur contenu dans le composant.
    Sauf que attention, l'instance ce trouvant dans ton ActionListener n'est pas la même que celle que tu affiches à l'écran.
    Lorsque tu crées une instance de Test_JTextField, le composant est par défaut vide, et donc ton message de console est aussi vide.

    Le plus simple pour débuter est de gérer ton ActionListener directement dans ton Test_JTextField, ainsi l'actionPerformed aura accès aux composants de ton panel si ceux-ci sont déclarés avant le constructeur.

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    Ok j'ai compris à présent l'histoire de l'instance qui est différente, merci pour cette infos, alors avec l'action du bouton dans la même classe que le jTextField, ça fonctionne bien sauf que moi, je fais un logiciel pour des devis, juste comme ça, pour m'entrainer, et j'ai une classe adresse ,dans laquelle il y a des JTextField, une classe Ligne ou il y a une JTable et une classe PiedDePage ou il y à le bouton "Valider", et ce bouton Valider a pour action de récupérer la valeur saisie par l'utilisateur des zones de texte de la classe Adresse ainsi que les articles de la classe Ligne, je ne peut donc pas mettre mon ActionListenner dans la classe Adresse par exemple pour récupérer les valeurs saisient.
    Il y a forcément une solution mais je ne la voient vraiment pas .

  6. #6
    Membre actif Avatar de pendoRa
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Mai 2007
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 317
    Points : 278
    Points
    278
    Par défaut
    Salut,

    tu peux créer une fonction qui récupère la saisie utilisateur ( saisie = Adresse.Text.getText(); ? ( en gros ) ) puis dans l'actionPerformed, tu appelles ta fonction ?

    Je n'arrive pas trop a modéliser ton precessus.

Discussions similaires

  1. JTextField récupération text
    Par frto0 dans le forum Composants
    Réponses: 2
    Dernier message: 15/06/2010, 14h01
  2. [MySQL] Récupération texte URL: Syntaxe $_GET
    Par scottie dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/10/2006, 14h01
  3. [RegEx] problème récupération texte
    Par Kerod dans le forum Langage
    Réponses: 2
    Dernier message: 25/01/2006, 16h10
  4. [VB6][Objet OLE] probleme récupération texte
    Par dedella_al dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/10/2005, 19h54
  5. récupération texte entre <option> et </option>
    Par Trunks dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 15/09/2005, 14h19

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