Limiter la taille d'un champ texte, je deviens fou

Limiter la taille d'un champ texte, je deviens fou - Java - Programmation

Marsh Posté le 17-12-2002 à 23:08:25    

Ca à l'air tout bête mais je cherche et je suis fatigué et je trouve pas :'(. Enfin bref, je fais un jtextfield et j'aimerais qu'il y ait max 8 caractères écrivables.


---------------
Belgian connection
Reply

Marsh Posté le 17-12-2002 à 23:08:25   

Reply

Marsh Posté le 18-12-2002 à 00:00:48    

je dirais que tu dois ajouter un KeyListener et surveiller la longueur du texte a chaque touches pressée

Reply

Marsh Posté le 18-12-2002 à 00:54:20    

carrément, moi qui pensait qu'on pouvais faire un truc plus simple  :cry:


---------------
Belgian connection
Reply

Marsh Posté le 18-12-2002 à 00:55:52    

belgique a écrit :

carrément, moi qui pensait qu'on pouvais faire un truc plus simple  :cry:  


 
ben g fait comme toi sans doute ... lu la doc, rien vu qui ressemblait a ca alors j'ai pensé a ca ... c tout
 
et pis c pas la mort hein

Reply

Marsh Posté le 18-12-2002 à 01:32:22    

Bah ,j'ai du mal là, ça fait 2 semaines que j'essaie d'apprendre un peu le java et tout m'est fort nouveau .
En plus j'ai plus emacs ni le psychanalyst qui va avec  :cry: .
 
Je dois apprendre le java, faire un réseau de neurone avec , faire ma première interface graphique de ma vie, puis faire un projet de bases de données tjs en java et j'arrive même pas à installer ce fichu driver  :cry:  
 


Message édité par belgique le 18-12-2002 à 01:33:39

---------------
Belgian connection
Reply

Marsh Posté le 18-12-2002 à 09:02:55    

[:necris] bonne chance ...

Reply

Marsh Posté le 18-12-2002 à 09:04:52    

bah, normalement, si tu voulais VRAIMENT respecter le modèle object de Swing, il te faudrait créer une sous-classe de Document, qui aurait une taille limitée, genre :  
 
 

Code :
  1. import javax.swing.text.AttributeSet;
  2. import javax.swing.text.DefaultStyledDocument;
  3. import javax.swing.text.BadLocationException;
  4. import java.awt.Toolkit;
  5. public class LimitedStyledDocument extends DefaultStyledDocument {
  6.   private int maxCharacters;
  7.   public static final int MAXCHARS = 140;
  8.  
  9.   private MyDocListener listener;
  10.   private Object thrower; 
  11.   public LimitedStyledDocument(Object thrower, int maxChars, MyDocListener listener) {
  12.     maxCharacters = maxChars;
  13.     this.listener = listener;
  14.     this.thrower = thrower;
  15.   }
  16.  
  17.   public LimitedStyledDocument(Object thrower, MyDocListener listener) {
  18.     maxCharacters = MAXCHARS;
  19.     this.listener = listener;
  20.     this.thrower = thrower;
  21.   }
  22.  
  23.   public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
  24.    
  25.     if ((getLength() + str.length()) <= maxCharacters)
  26.       super.insertString(offs, str, a);
  27.     else {
  28.       Toolkit.getDefaultToolkit().beep();
  29.       listener.textTooLong(thrower, maxCharacters);
  30.     }
  31.   }
  32. }

 
 
 
et une interface :  
 

Code :
  1. public interface MyDocListener {
  2.   public void textTooLong(Object thrower, int maxcars);
  3. }


 
 
Ensuite, tu fait :  

Code :
  1. JTextField tf = new JTextField(8);
  2. tf.setDocument(new LimitedStyledDocument(unObjet, 8, unListener));


 
Quand la longueur de texte dépasse ce que tu as demandé, ça doit faire un bip, et appeller la méthode 'textTooLong' de ton listener.
 
C'est pas la méthode la plus simple, mais c'est "la bonne" dans l'esprit : le JTextField, il est pas sensé savoir ce qu'il affiche : on lui demande d'afficher le contenu d'un document, lui, il affiche...Par contre, c'est au document de connaître et de faire respecter ses limitattions...
 
ouala ouala..


Message édité par gfive le 18-12-2002 à 09:05:25
Reply

Marsh Posté le 18-12-2002 à 10:35:19    

gfive a écrit :

bah, normalement, si tu voulais VRAIMENT respecter le modèle object de Swing, il te faudrait créer une sous-classe de Document, qui aurait une taille limitée, genre :  
 
 

Code :
  1. import javax.swing.text.AttributeSet;
  2. import javax.swing.text.DefaultStyledDocument;
  3. import javax.swing.text.BadLocationException;
  4. import java.awt.Toolkit;
  5. public class LimitedStyledDocument extends DefaultStyledDocument {
  6.   private int maxCharacters;
  7.   public static final int MAXCHARS = 140;
  8.  
  9.   private MyDocListener listener;
  10.   private Object thrower; 
  11.   public LimitedStyledDocument(Object thrower, int maxChars, MyDocListener listener) {
  12.     maxCharacters = maxChars;
  13.     this.listener = listener;
  14.     this.thrower = thrower;
  15.   }
  16.  
  17.   public LimitedStyledDocument(Object thrower, MyDocListener listener) {
  18.     maxCharacters = MAXCHARS;
  19.     this.listener = listener;
  20.     this.thrower = thrower;
  21.   }
  22.  
  23.   public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
  24.    
  25.     if ((getLength() + str.length()) <= maxCharacters)
  26.       super.insertString(offs, str, a);
  27.     else {
  28.       Toolkit.getDefaultToolkit().beep();
  29.       listener.textTooLong(thrower, maxCharacters);
  30.     }
  31.   }
  32. }

 
 
 
et une interface :  
 

Code :
  1. public interface MyDocListener {
  2.   public void textTooLong(Object thrower, int maxcars);
  3. }


 
 
Ensuite, tu fait :  

Code :
  1. JTextField tf = new JTextField(8);
  2. tf.setDocument(new LimitedStyledDocument(unObjet, 8, unListener));


 
Quand la longueur de texte dépasse ce que tu as demandé, ça doit faire un bip, et appeller la méthode 'textTooLong' de ton listener.
 
C'est pas la méthode la plus simple, mais c'est "la bonne" dans l'esprit : le JTextField, il est pas sensé savoir ce qu'il affiche : on lui demande d'afficher le contenu d'un document, lui, il affiche...Par contre, c'est au document de connaître et de faire respecter ses limitattions...
 
ouala ouala..


 
aussi, il est vrai :jap:

Reply

Marsh Posté le 18-12-2002 à 12:23:31    

je vais abandonner et nier l'histoire je crois :/ , je vais faire un test par après et faire des popups :/


---------------
Belgian connection
Reply

Marsh Posté le 18-12-2002 à 12:24:04    

Un grand merci quand même pour la longue explication, si j'ai le temps de bien le faireun autre fois , je le ferai.


---------------
Belgian connection
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed