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 :
- import javax.swing.text.AttributeSet;
- import javax.swing.text.DefaultStyledDocument;
- import javax.swing.text.BadLocationException;
- import java.awt.Toolkit;
- public class LimitedStyledDocument extends DefaultStyledDocument {
- private int maxCharacters;
- public static final int MAXCHARS = 140;
-
- private MyDocListener listener;
- private Object thrower;
- public LimitedStyledDocument(Object thrower, int maxChars, MyDocListener listener) {
- maxCharacters = maxChars;
- this.listener = listener;
- this.thrower = thrower;
- }
-
- public LimitedStyledDocument(Object thrower, MyDocListener listener) {
- maxCharacters = MAXCHARS;
- this.listener = listener;
- this.thrower = thrower;
- }
-
- public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
-
- if ((getLength() + str.length()) <= maxCharacters)
- super.insertString(offs, str, a);
- else {
- Toolkit.getDefaultToolkit().beep();
- listener.textTooLong(thrower, maxCharacters);
- }
- }
- }
|
et une interface :
Code :
- public interface MyDocListener {
- public void textTooLong(Object thrower, int maxcars);
- }
|
Ensuite, tu fait :
Code :
- JTextField tf = new JTextField(8);
- 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..
|