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

AWT/Swing Java Discussion :

JtextField et curseur


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    administratif
    Inscrit en
    Avril 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : administratif

    Informations forums :
    Inscription : Avril 2020
    Messages : 19
    Points : 11
    Points
    11
    Par défaut JtextField et curseur
    Bonjour,

    j'ai fait des recherches sur le forum, ainsi que dans les tutoriels mais je n'arrive pas à trouver. je débute et mon problème est de changer le curseur de place dans un 1er JtextField quand je tape des chiffres. dans mon 1erJtextField, le curseur apparait à l'ouverture, je tape mes chiffres et je voudrais que mon curseur passe directement sur le 2eme Jtextfield quand j'ai finit de taper. je ne veux pas faire tab, ni cliquer avec la souris sur le 2eme JtextField.
    Pouvez vous m'aider svp.

  2. #2
    Membre averti
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Points : 346
    Points
    346
    Par défaut
    Ça n’a pas l’air bien compliqué, mais il va d’abord falloir préciser ton besoin. Qu’entends-tu par « quand j’ai finit de taper » ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    administratif
    Inscrit en
    Avril 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : administratif

    Informations forums :
    Inscription : Avril 2020
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Et bien j'ai 2 JtextField et 1 button, je tape un nombre dans le 1er JTexField et je veux que quand j'ai finit de taper le nombre mon curseur passe directement dans le 2eme JtextField pour taper le 2eme nombre sans utiliser la souris et la touche du clavier TAB, voilà..et le bouton sert à calculer. car si je tapes un nombre dans le 1er JtextField je dois passer avec la souris dans le 2eme et moi je veux un automastisme.

    j'ai essayé JtextField1.transferFocus() mais le curseur se met automatiquement sur le 2eme JtextField alors que je veux que le curseur passe du 1er au 2eme Jtexfield quand j'ai finit de taper le nombre

    pouvez vous me conseiller ?

  4. #4
    Membre averti
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Points : 346
    Points
    346
    Par défaut
    Bon, tu viens de me répéter presque à l'identique ton premier message. Je te répète donc ma question : qu'entends-tu par "quand j'ai finit de taper le nombre" ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    administratif
    Inscrit en
    Avril 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : administratif

    Informations forums :
    Inscription : Avril 2020
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Oui , donc je tapes le nombre dans mon 1er JtextField et le curseur passe directement sur le 2eme JtextField sans que j'utilise la souris et la touche tab, voilà ce que je veux et quand je clique sur mon bouton le calcul se fait..j'espère etre claire cette fois_ci.

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Eventuellement, avec ceci, en imaginant que la condition c'est "tapper 4 caractères" : (bon le code a été fait à l'arrache)

    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
    import java.awt.EventQueue;
    import java.awt.FlowLayout;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.border.EmptyBorder;
    import javax.swing.event.DocumentEvent;
    import javax.swing.event.DocumentListener;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.PlainDocument;
     
    public class test extends JFrame
    {
     
    	private JPanel contentPane;
    	private JTextField textField;
    	private JTextField textField_1;
     
    	/**
             * Launch the application.
             */
    	public static void main(String[] args)
    	{
    		EventQueue.invokeLater(new Runnable()
    		{
    			public void run()
    			{
    				try
    				{
    					test frame = new test();
    					frame.setVisible(true);
    				} catch (Exception e)
    				{
    					e.printStackTrace();
    				}
    			}
    		});
    	}
     
    	/**
             * Create the frame.
             */
    	public test()
    	{
    		initialize();
    	}
    	private void initialize() {
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		setBounds(100, 100, 450, 300);
    		contentPane = new JPanel();
    		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    		setContentPane(contentPane);
    		contentPane.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
    		contentPane.add(getTextField());
    		contentPane.add(getTextField_1());
    	}
     
    	private JTextField getTextField() {
    		if (textField == null) {
    			final int limit = 4;
    			textField = new JTextField();
     
    			textField.setDocument(new PlainDocument()
    			{
    				@Override
    				public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
    				    if (str == null)
    				      return;
     
    				    if ((getLength() + str.length()) <= limit) {
    				    	super.insertString(offset, str, attr);
    				    }
    				    else {
    				    	System.err.println("Focus on other field");
    				    	textField_1.requestFocus();
    				    	textField_1.selectAll();
    				    }
    				  }
    			});
     
    			textField.setColumns(10);
     
    		}
    		return textField;
    	}
    	private JTextField getTextField_1() {
    		if (textField_1 == null) {
    			textField_1 = new JTextField();
    			textField_1.setColumns(10);
    		}
    		return textField_1;
    	}
     
     
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Avatar de Chatanga
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 211
    Points : 346
    Points
    346
    Par défaut
    J'avais parfaitement compris la première fois que tu désires que le focus bascule automatiquement vers le second champ de texte après avoir terminé de taper le premier nombre. C'est pourquoi ma question était "qu'entends-tu par finir de taper un nombre ?" et non "que veux-tu qu'il se passe une fois que tu as fini de taper le premier nombre ?". Malheureusement, tu as répondu par 3 fois à cette seconde question ! Quand on te demande 2 fois de suite la même chose, tu devrais prendre le temps de te demander ce qui ne va pas. Parce que le problème est quand même évident, non ? Qu'est-ce que tu entends par finir de taper un nombre ?

    Dans l'exemple donné par wax78, il choisit d'y répondre pour toi en décidant arbitrairement que tous les nombres ont 4 chiffres et que la saisie du 4éme chiffre termine la saisie. C'est simple, mais ça n'est certainement pas ce dont tu as besoin. Si ton premier champ contenait un nombre formaté tel un numéro de téléphone ou un numéro de carte bleu, pourquoi pas, mais ton application semble davantage relever de la calculatrice utilisant des nombres quelconques.

    Comment veux-tu qu'un programme (ou un humain d'ailleurs) puisse deviner quand tu as fini de taper un nombre ? Comment veux-tu qu'il devine que lorsque tu as tapé 178, par exemple, tu as fini et que tu n'avais pas envie de taper 1786 ? Note aussi que la question est plus profonde que ça. Qu'en est-il de l'édition d'un nombre existant ? Si tes nombres ont vraiment toujours 4 chiffres, que se passe-t-il lorsque tu changes le 2éme ? Le focus doit-il sauter immédiatement au second champ ou bien te laisser modifier le 3éme et le 4éme ?

    A moins que les nombres que tu veux taper répondent à des règles précises que tu refuses obstinément de divulguer, la réponse à ton problème est donc : ça n'est pas possible, car les ordinateurs télépathes n'existent pas encore.

  8. #8
    Membre à l'essai
    Femme Profil pro
    administratif
    Inscrit en
    Avril 2020
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : administratif

    Informations forums :
    Inscription : Avril 2020
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Comment veux-tu qu'un programme (ou un humain d'ailleurs) puisse deviner quand tu as fini de taper un nombre ? Comment veux-tu qu'il devine que lorsque tu as tapé 178, par exemple, tu as fini et que tu n'avais pas envie de taper 1786 ? Note aussi que la question est plus profonde que ça. Qu'en est-il de l'édition d'un nombre existant ? Si tes nombres ont vraiment toujours 4 chiffres, que se passe-t-il lorsque tu changes le 2éme ? Le focus doit-il sauter immédiatement au second champ ou bien te laisser modifier le 3éme et le 4éme ?
    Pas Faux ! et mes nombres peuvent être de 3 chiffres ou 2 ou 4 ou plus et passer immédiatement sur le 2ème JTextField donc j'ai ma réponse et c'est pas possible même avec la réponse de wax78 qui est limité à 4 nombres..pour passer le focus immédiatement sans définir le format du nombre java ne peut effectuer un passage directe entre JtextField en comptant les espaces ? pourtant avec transferFocus() il passe directement sur le 2ème Jtextfield.

    Merci pour vos réponses c'est sympa ! je ferais donc avec la touche tab ou la souris ! Dommage que java ne prévoit pas le passage du curseur directement avec une fonction de fin de saisie

  9. #9
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Ghis7 Voir le message
    Dommage que java ne prévoit pas le passage du curseur directement avec une fonction de fin de saisie
    Aucun langage ne sait deviner quand une personne a terminé de saisir ce qu'elle veut saisir. Soit l'utilisateur l'indique par une manipulation, soit le programme le fait selon un critère programmé par le programmeur.

    Autrement dit, il faut une condition déterminée de fin de saisie.

    C'était le sens de la question de @Chatanga, à laquelle @wax78 a répondu en décidant d'un nombre de chiffres, et à laquelle tu as répondu en choisissant de passer au champ suivant par tab. On peut utiliser différents moyens, d'autres touches par exemple (par exemple la touche +, si le but est d'additionner les deux champs, ou une autre touche d'opération, qui permettrait de déterminer le type d'opération par la même occasion), mais il faut indiquer au programme quand il doit changer de champ. On pourrait utiliser un timer aussi par exemple, qui estimerait la vitesse de frappe (le temps entre chaque caractère saisi) et qui calculerait et détecterait quand le temps sans frappe est suffisant pour décider de changer de champ, mais ça pourrait être hasardeux selon l'utilisateur.
    On peut avoir des algorithmes plus ou moins complexes (y compris avec de l'IA) pour déterminer quand la saisie dans le premier champ est terminée, dans le but d'éviter que l'utilisateur ait à faire une manipulation particulière.
    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.

Discussions similaires

  1. [JTextField] Enlever Curseur Clignotant
    Par thomas9501 dans le forum Composants
    Réponses: 5
    Dernier message: 26/01/2008, 08h30
  2. Réponses: 8
    Dernier message: 11/09/2006, 14h33
  3. JTextField et Formatted : curseur
    Par maminova dans le forum Composants
    Réponses: 1
    Dernier message: 15/12/2005, 20h20
  4. [JTextField] Gestion du curseur
    Par webbulls dans le forum Composants
    Réponses: 4
    Dernier message: 19/07/2005, 10h11
  5. [JTextField] placer le curseur sur un JTextField
    Par sixkiller dans le forum Composants
    Réponses: 2
    Dernier message: 30/11/2004, 21h28

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