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 :

MaskFormater Unhandled ParseException


Sujet :

AWT/Swing Java

  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut MaskFormater Unhandled ParseException
    Bonjour, je voudrais faire un JFormatedTeaxtfield. J'ai donc consulter la FAQ(http://java.developpez.com/faq/gui/?page=awtSwingTexte) et fait pareil cependant j'obtient une erreur avant la compilation

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
    		{
    			MaskFormatter mask = new MaskFormatter("**********");
    			JFormattedTextField noteField = new JFormattedTextField(mask);
    		}
    		catch (ParseException e)
    		{
     
    		}
    Et j'ai l'erreu Unhandled ParseException sur new MaskFormatter("**********");


    Merci de votre aide

  2. #2
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    L'erreur te dit que tu ne catch pas de ParseException, pourtant tu l'a mis ! Etrange, non ?

    Le problème vient de tes imports : il existe plusieurs ParseException, et celle que tu dois utiliser se trouve dans java.text.ParseException !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import java.text.ParseException;
    try
    {
    	MaskFormatter mask = new MaskFormatter("**********");
    	JFormattedTextField noteField = new JFormattedTextField(mask);
    }
    catch (ParseException e)
    {
     
    }
    Oublie pas le tag

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    Et je voudrais aussi savoir comment modifier la taille de mon champ, avant j'avai un JtextField et je mettait new JtextField("",10); mais la je ne peux plus...


    Merci de votre aide

  4. #4
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Citation Envoyé par franfr57
    Et je voudrais aussi savoir comment modifier la taille de mon champ, avant j'avai un JtextField et je mettait new JtextField("",10); mais la je ne peux plus...


    Merci de votre aide
    Merci la javadoc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    noteField.setColumns( /*nb de colonnes*/ ) ;

  5. #5
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    j'ai remarqué aussi autre chose qui peut être un inconvénient. Sur un JTextFieldFormater qui est formaté à 10 caractère on peut cliquer et commencer à taper à partir du 5ème caractère, peux ton alors bloquer cela pour éviter des vide et des erreurs d'utilisateurs qui se diront qui ne peuvent pas taper 10 caractères...

    Merci de votre aide

  6. #6
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Citation Envoyé par franfr57
    j'ai remarqué aussi autre chose qui peut être un inconvénient. Sur un JTextFieldFormater qui est formaté à 10 caractère on peut cliquer et commencer à taper à partir du 5ème caractère, peux ton alors bloquer cela pour éviter des vide et des erreurs d'utilisateurs qui se diront qui ne peuvent pas taper 10 caractères...

    Merci de votre aide
    Et non, c'est comme ça ! Ton text field est rempli d'un caractère d'échappement, c'est à dire un caractère qui te dit que tu peux placer un caractère à cet endroit. Par défaut c'est un espace, tu peux le remplacer par le caractère que tu veux : un underscore '_' ou un astérisque '*' conviendrait sûrement pour du texte. Si c'est un nombre, tu peux utiliser le dièse '#'.

    Tu peux également placer des caractères qui seront non supprimmables, comme le '/' dans l'exemple ci dessous.

    Voilà ce que je fais dans un de mes programmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaskFormatter maskLSRef = new MaskFormatter("###/###") ; // 3 chiffres, suivis du caractère '/', suivi de 3 chiffres
    maskLSRef.setPlaceholderCharacter('#') ; // Caractère d'échappement
    fieldRef.setFormatterFactory( new DefaultFormatterFactory(maskLSRef) ) ;

  7. #7
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    Il n'est donc pas possible de faire que lorsqu'on clique sur le champ mettre automatiquement le focus au premier caractère?

  8. #8
    Membre chevronné Avatar de schniouf
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2003
    Messages : 382
    Par défaut
    Citation Envoyé par franfr57
    Il n'est donc pas possible de faire que lorsqu'on clique sur le champ mettre automatiquement le focus au premier caractère?
    Je sais pas, jamais essayé...
    Ptetre avec un FocusListener, et au moment où tu reçois le focus tu fais un textfield.setCaretPosition ou un truc dans le genre. A tester !

    Une autre solution serait de ne pas passer par un Mask et un JFormattedTextField mais par un JTextField simple auquel tu appliques un PlainDocument.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JTextField t = new JTextField() ;
    t.setDocument( new IntegerMask() ) ;
    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
    98
    package com.azzarius.ui.masks;
     
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.PlainDocument;
     
    /**
     * Masque de saisie pour entiers.
     * 
     * @author Schniouf
     *
     */
    public class IntegerMask extends PlainDocument
    {
     
    	private static final long serialVersionUID = 3480420947370535022L;
     
     
     
    	/**Longueur par défaut (en nombre de chiffres) d'un entier*/
    	public static final int DEFAULT_LENGTH = 32 ;
     
    	/**Nombre max de caractères que pourra contenir le textfield*/
    	private int maxLength ;
     
     
     
    	/**
             * Constructeur avec nombre de chiffres par défaut.
             */
    	public IntegerMask()
    	{
    		this ( DEFAULT_LENGTH ) ;
    	}
     
     
    	/**
             * Constructeur avec nombre de chiffres choisi.
             * @param length Nombre de chiffres de l'entier
             */
    	public IntegerMask( int length )
    	{
    		super() ;
    		this.maxLength = length ;
    	}
     
     
     
    	/**
             * Méthode appelée à l'insertion d'un String
             */
    	public void insertString(int position, String chaine, AttributeSet attribut) throws BadLocationException 
    	{
     
    		StringBuffer buffer = new StringBuffer();
    		char caractere;
     
    		/*
    		 * Pour chaque caractère à ajouter
    		 */
    		for (int i = 0; i < chaine.length(); i++) 
    		{
    			caractere = chaine.charAt(i);
     
    			boolean ok ;
     
    			// Si c'est un chiffre
    			ok = Character.isDigit( caractere ); 
     
    			// Si on n'a pas dépassé la longueur totale
    			ok &= ( (getLength()+chaine.length()) <= maxLength ) ; 
     
    			// Si tout est OK, on ajoute le caractère dans le buffer
    			if ( ok )
    				buffer.append(caractere) ;
    		}
     
    		// Ajout du buffer au textfield
    		super.insertString(position, buffer.toString(), attribut);
     
    	}
     
     
     
    	public int getMaxLength()
    	{
    		return maxLength;
    	}
     
     
     
    	public void setMaxLength(int maxLength)
    	{
    		this.maxLength = maxLength;
    	}
     
     
    }
    Ensuite à toi de faire tes propres tests pour vérifier la validité de ta chaîne !

  9. #9
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    Comment je peux faire pour appeler ta méthode Méthode appelée à l'insertion d'un String
    il faut que je mette un listener?
    Et je ne comprend pas trop cette fonction

  10. #10
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Et un petit merci, avec toutes les infos données, ne ferait pas de mal...

  11. #11
    Membre éclairé
    Inscrit en
    Janvier 2006
    Messages
    716
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 716
    Par défaut
    Merci, mais je sais toujours pas comment marche la fonction ni ce que représente AttributeSet

    EDIT: Merci beaucoup, je viens de comprendre le fonctionnement!

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

Discussions similaires

  1. [ eclipse ] [ plugin ] [ JNI ] Unhandled event loop error
    Par Jean-Philippe Shields dans le forum Eclipse Java
    Réponses: 9
    Dernier message: 28/11/2005, 18h05
  2. unhandled exception class System.SecurityException
    Par the big ben 5 dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 17h41
  3. unhandled exception
    Par PRUVOT dans le forum MFC
    Réponses: 4
    Dernier message: 27/10/2005, 08h57
  4. [Debutant] Erreur "Unhandled event loop exception"
    Par pilz dans le forum Eclipse Platform
    Réponses: 14
    Dernier message: 08/12/2004, 15h19
  5. Réponses: 5
    Dernier message: 12/06/2002, 15h12

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