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 :

Mettre une règle de nombre d'entrées


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 2
    Par défaut Mettre une règle de nombre d'entrées
    Vraiment désolé,
    Je sais que plusieurs d'entre vous sont des experts... et ma question sera surement très "de base" pour vous,

    Voilà, je crée un petit programme juste pour tester mes nouvelles connaissances. Je crée un genre de formulaire... J'aimerais savoir comment imposer un nombre de caractères, exemple; pour la question " votre nom", j'aimerais imposer un nombre de caractères minimal et maximal. Tour les tutos me disent comment le faire pour demander le nom, mais je ne vois rien côté "règle".


    Merci

  2. #2
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Salut,

    Comment est faite cette saisie ? C'est en console, via une IHM graphique Swing, JavaFX ou autre ?
    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.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2017
    Messages : 2
    Par défaut
    Je travaille avec éclipse et "j'essaie" de coder en JAVA mais bon... lolll Non ça va venir, je comprend la logique mais il me manque beaucoup de connaissance!

  4. #4
    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 : 55
    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
    Billets dans le blog
    2
    Par défaut
    Eclipse, c'est l'outil de développement. Cela ne me dit pas quel type d'interface graphique tu vas utiliser (il y en a plusieurs déjà en Java Desktop), mais on peut développer en Java sous Eclipse des applications web, avec une UI en html/CSS/javascript, ou en GWT, ou autre, même en console (bon pour des formulaires, c'est peu probable, mais pas impossible). C'est comme si tu me disais que tu voulais cuisiner du poulet, que je te demandais quelle recette, et que tu me répondais que tu avais une cuisinière à gaz. Je sais toujours pas si tu veux le faire rotir, bouillir, sauter, frire...

    Mais on va supposer que tu utilises Swing.

    En Swing, sur un JTextField, le composant de saisie de texte commun, la première solution qu'on c'est l'interface InputVerifier. Il suffit d'implémenter sa méthode pourqu'elle retourne true quand la saisie est OK et false quand elle est KO.

    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
    public class DemoInputVerifier {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel panel = new JPanel(new GridBagLayout());
     
    		frame.add(panel);
     
    		panel.add(new JLabel("Nom :"), new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.BASELINE,GridBagConstraints.NONE,new Insets(0, 0, 0, 0),0,0));
    		JTextField inputField=new JTextField();
    		panel.add(inputField, new GridBagConstraints(1,0,1,1,1,0,GridBagConstraints.BASELINE,GridBagConstraints.HORIZONTAL,new Insets(0, 5, 0, 0),0,0));
    		inputField.setVerifyInputWhenFocusTarget(false);
    		final Border inputFieldBorder = inputField.getBorder();
    		final Border inputFieldErrorBorder = BorderFactory.createLineBorder(Color.RED);
    		inputField.setBorder(inputFieldErrorBorder);
    		inputField.setInputVerifier(new InputVerifier() {
     
    			@Override
    			public boolean verify(JComponent input) { 
    				String text=((JTextField)input).getText();
    				boolean ok = text.length()>3 && text.length()<25;
    				if ( !ok ) {
    					input.setBorder(inputFieldErrorBorder);
    				}
    				else {
    					input.setBorder(inputFieldBorder);
    				}
    				return ok;
    			}
    		});
     
    		JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    		buttonPanel.add(new JButton("OK"));
    		frame.add(buttonPanel,BorderLayout.SOUTH);
     
    		frame.setSize(300, 300);		
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    }
    Avantages :
    • on a un contrôle directe sur le composant graphique qui est passé en paramètre. Par exemple, ici, je mets un bord rouge en cas de saisie incorrect
    • l'erreur est bloquante : on ne peut pas sortir du champ tant qu'elle n'est pas corrigée


    Inconvénients :
    • Il ne réagit que lorsqu'on sort du champ, donc déjà, il faut pouvoir sortir (avoir un autre champ par exemple).
    • On peut intervenir sur la saisie, mais ça force un reset du curseur, ce qui peut être très gênant pour l'utilisateur


    L'autre soluton est le DocumentListener :
    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
    public class DemoDocumentListener {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel panel = new JPanel(new GridBagLayout());
     
    		frame.add(panel);
     
    		panel.add(new JLabel("Nom :"), new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.BASELINE,GridBagConstraints.NONE,new Insets(0, 0, 0, 0),0,0));
    		JTextField inputField=new JTextField();
    		panel.add(inputField, new GridBagConstraints(1,0,1,1,1,0,GridBagConstraints.BASELINE,GridBagConstraints.HORIZONTAL,new Insets(0, 5, 0, 0),0,0));
    		inputField.setVerifyInputWhenFocusTarget(false);
    		final Border inputFieldBorder = inputField.getBorder();
    		final Border inputFieldErrorBorder = BorderFactory.createLineBorder(Color.RED);
    		inputField.setBorder(inputFieldErrorBorder);
    		inputField.setInputVerifier(new InputVerifier() {
     
    			@Override
    			public boolean verify(JComponent input) { 
    				String text=((JTextField)input).getText();
    				boolean ok = text.length()>3 && text.length()<25;
    				if ( !ok ) {
    					input.setBorder(inputFieldErrorBorder);
    				}
    				else {
    					input.setBorder(inputFieldBorder);
    				}
    				return ok;
    			}
    		});
     
    		((AbstractDocument)inputField.getDocument()).setDocumentFilter(new DocumentFilter() {
     
     
     
    			@Override
    			public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr)
    					throws BadLocationException {
    				check(offset, 0, text);
    				super.insertString(fb, offset, text, attr);
    			}
     
    			@Override
    			public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
    					throws BadLocationException {
    				check(offset, length, text);
    				super.replace(fb, offset, length, text, attrs);
    			}
     
    			@Override
    			public void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
    				check(offset, length, "");
    				super.remove(fb, offset, length);
    			}
     
    			private void check(int offset, int length, String text) {
    				String currentText = inputField.getText();
    				int newLength = currentText.length()-length+text.length();
    				if ( newLength>3 && newLength<25 ) {
    					inputField.setBorder(inputFieldBorder);
    				}
    				else {
    					inputField.setBorder(inputFieldErrorBorder);
    				}
    			}
     
    		});
     
    		JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    		buttonPanel.add(new JButton("OK"));
    		frame.add(buttonPanel,BorderLayout.SOUTH);
     
    		frame.setSize(300, 300);		
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    }
    Avantages :
    • On peut intervenir directement sur la frappe en cours de frappe. On peut tester mais ausis modifier, comme par exemple empêcher toute saisie de plus de n caractères, ou forcer les majuscules, etc
    • On peut distinguer si on supprime, ajoute, remplace


    Inconvénients :
    • Un peu plus compliqué
    • N'empêche pas de sortir d'un champ invalide
    • Ne permet pas de modifier directement le composant (mais tant qu'il est dans le scope ce n'est pas gênant, comme tu peux le voir dans mon exemple.


    On peut éventuellement mixer les deux :

    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
    public class DemoInput {
     
    	public static void main(String[] args) {
     
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		JPanel panel = new JPanel(new GridBagLayout());
     
    		frame.add(panel);
     
    		panel.add(new JLabel("Nom :"), new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.BASELINE,GridBagConstraints.NONE,new Insets(0, 0, 0, 0),0,0));
    		JTextField inputField=new JTextField();
    		panel.add(inputField, new GridBagConstraints(1,0,1,1,1,0,GridBagConstraints.BASELINE,GridBagConstraints.HORIZONTAL,new Insets(0, 5, 0, 0),0,0));
    		inputField.setVerifyInputWhenFocusTarget(false);
    		final Border inputFieldBorder = inputField.getBorder();
    		final Border inputFieldErrorBorder = BorderFactory.createLineBorder(Color.RED);
    		inputField.setBorder(inputFieldErrorBorder);
    		inputField.setInputVerifier(new InputVerifier() {
     
    			@Override
    			public boolean verify(JComponent input) { 
    				String text=((JTextField)input).getText();
    				boolean ok = text.length()>3 && text.length()<25;
    				if ( !ok ) {
    					input.setBorder(inputFieldErrorBorder);
    				}
    				else {
    					input.setBorder(inputFieldBorder);
    				}
    				return ok;
    			}
    		});
     
    		((AbstractDocument)inputField.getDocument()).setDocumentFilter(new DocumentFilter() {
     
     
     
    			@Override
    			public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr)
    					throws BadLocationException {
    				check(offset, 0, text);
    				super.insertString(fb, offset, text, attr);
    			}
     
    			@Override
    			public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
    					throws BadLocationException {
    				check(offset, length, text);
    				super.replace(fb, offset, length, text, attrs);
    			}
     
    			@Override
    			public void remove(FilterBypass fb, int offset, int length) throws BadLocationException {
    				check(offset, length, "");
    				super.remove(fb, offset, length);
    			}
     
    			private void check(int offset, int length, String text) {
    				String currentText = inputField.getText();
    				int newLength = currentText.length()-length+text.length();
    				if ( newLength>3 && newLength<25 ) {
    					inputField.setBorder(inputFieldBorder);
    				}
    				else {
    					inputField.setBorder(inputFieldErrorBorder);
    				}
    			}
     
    		});
     
    		JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    		buttonPanel.add(new JButton("OK"));
    		frame.add(buttonPanel,BorderLayout.SOUTH);
     
    		frame.setSize(300, 300);		
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
    }
    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. [OL-2007] Mettre une règle sur un dossier spécifique
    Par CrasherSEP dans le forum Outlook
    Réponses: 1
    Dernier message: 10/07/2013, 13h10
  2. Réponses: 3
    Dernier message: 11/08/2009, 11h39
  3. Connaitre nombre d'entrées d'une table
    Par philsand77 dans le forum Requêtes
    Réponses: 4
    Dernier message: 16/10/2007, 06h19
  4. Réponses: 7
    Dernier message: 21/03/2006, 13h01
  5. Mettre une relation 1,1 entre 2 tables
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/05/2005, 17h20

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