Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre à l'essai
    Inscrit en
    juillet 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 95
    Points : 20
    Points
    20

    Par défaut Longueur d'un showInputDialog

    Peut on spécifier la longueur maximum de la saisie dans un showInputDialog ?

    Merci

  2. #2
    Rédacteur
    Avatar de eclesia
    Inscrit en
    décembre 2006
    Messages
    1 938
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 1 938
    Points : 2 421
    Points
    2 421

    Par défaut

    Comme le résultat est un objet String j'aurais tendance a dire : longeur illimité

    mais le mieux est d'essayer.

  3. #3
    Membre à l'essai
    Inscrit en
    juillet 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 95
    Points : 20
    Points
    20

    Par défaut

    je voudrais en fait que le curseur soit bloqué au bout de 9 caractères (c'est un numéro de SIREN). Je fais deja le controle après pour vérifier la taille mais je voudrais le faire au moment de la saisie...

  4. #4
    Membre régulier
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    83
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 83
    Points : 87
    Points
    87

    Par défaut

    Une piste peut être:

    Sais tu récupérer le textfield et mettre un listener "keypressed" dessus qui annule la frappe si la taille > 9

  5. #5
    Membre à l'essai
    Inscrit en
    juillet 2005
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : juillet 2005
    Messages : 95
    Points : 20
    Points
    20

    Par défaut

    oué effectivement mais comment

  6. #6
    Expert Confirmé Sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    avril 2002
    Messages
    13 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : avril 2002
    Messages : 13 020
    Points : 20 793
    Points
    20 793

    Par défaut

    Salut,


    Une manière de limiter la taille d'un JTextField est d'utiliser un DocumentFilter, et de redéfinir ses méthodes afin de bloquer lorsqu'on dépasse le nombre de caractère, par exemple :
    Code :
    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
    public class SizeDocumentFilter extends DocumentFilter {
     
    	private final int maxLength;
     
    	public SizeDocumentFilter(int maxLength) {
    		this.maxLength = maxLength;
     
    	}
     
    	@Override
    	public void insertString(FilterBypass fb, int offset, String text,
    			AttributeSet attrs) throws BadLocationException {
    		// Calcul du nombre de caractère qu'il est encore possible d'ajouter :
    		int len = this.maxLength - fb.getDocument().getLength();
    		if (len <= 0) {
    			// Beep car déja complet
    			Toolkit.getDefaultToolkit().beep();
    		} else {
    			if (len < text.length()) {
    				// on tronque la chaine si elle est trop grande :
    				text = text.substring(0, len);
    				// Beep car chaine tronqué
    				Toolkit.getDefaultToolkit().beep();
    			}
    			// Puis on insert la chaine :
    			fb.insertString(offset, text, attrs);
    		}
    	}
     
    	@Override
    	public void replace(FilterBypass fb, int offset, int length, String text,
    			AttributeSet attrs) throws BadLocationException {
    		// Calcul du nombre de caractère qu'il est encore possible d'ajouter
    		// (après avoir enlévé les eventuelles caractères remplacés) :
    		int len = this.maxLength + length - fb.getDocument().getLength();
     
    		if (len <= 0) {
    			// Beep car déja complet
    			Toolkit.getDefaultToolkit().beep();
    		} else {
    			if (len < text.length()) {
    				// on tronque la chaine si elle est trop grande :
    				text = text.substring(0, len);
    				// Beep car chaine tronqué
    				Toolkit.getDefaultToolkit().beep();
    			}
    			// Puis on effectue le remplacement
    			fb.replace(offset, length, text, attrs);
    		}
    	}
    }
    Mais on n'a malheureusement pas accès au JTextField du JOptionPane... C'est pourquoi il faut utiliser showOptionPane() et créer de toutes parts la boite de dialogue, par exemple :
    Code :
    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
    	public static String showInputDialog(Component parentComponent,
    			Object message, int maxlen) throws HeadlessException {
     
    		// On récupère la locale du composant parent (ou celle par défaut) :
    		Locale locale = (parentComponent == null) ? Locale.getDefault() : parentComponent.getLocale();
     
    		// On crée un Document auquel on associe le filtre :
    		PlainDocument doc = new PlainDocument();
    		doc.setDocumentFilter(new SizeDocumentFilter(maxlen));
    		// On crée le JTextField de saisie :
    		final JTextField textField = new JTextField(doc, null, 0);
     
     
    		// On affiche la boite de dialogue
    		int ret = JOptionPane.showOptionDialog(
    				parentComponent,	// Composant parent
    				new Object[] { message, textField },	// Contenu de la BdD
    				UIManager.getString("OptionPane.inputDialogTitle",locale), // Titre de la BdD
    				JOptionPane.OK_CANCEL_OPTION,	// Bouton OK/Cancel
    				JOptionPane.QUESTION_MESSAGE,	// Style "Question"
    				null, null, null);
     
    		// Si on a cliqué sur OK on retourne le texte
    		if (ret == JOptionPane.OK_OPTION) {
    			return textField.getText();
    		}
    		// Sinon on retourne null
    		return null;
    	}
    Mais il y a un défaut : le JTextField n'a pas le focus par défaut...
    Si quelqu'un a une solution pour ca

    a++

  7. #7
    Invité de passage
    Inscrit en
    avril 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : avril 2008
    Messages : 1
    Points : 1
    Points
    1

    Par défaut

    un thread qui date quelque peu, mais bon, si ca peut aider.

    Citation Envoyé par adiGuba Voir le message

    Mais il y a un défaut : le JTextField n'a pas le focus par défaut...
    Si quelqu'un a une solution pour ca

    a++
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    final JTextField textField = new JTextField(doc, null, 0){
        boolean init = false;
        public void paint(Graphics g) {
            super.paint(g);
            if (!init){
                init = true;
                this.requestFocus();
            }
        }
    };

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •