Limitar un JTextField a un nº de caracteres

He visto tu respuesta alguien que preguntó por lo mismo. Esta era tu solución:
import javax.swing.text.*;
import javax.swing.*;
public abstract class LimitadorDeTexto implements AbstractDocument
{
private int limiteDeCaracteres;
public LimitadorDeTexto(int limiteDeCaracteres )
{
this.limiteDeCaracteres = limiteDeCaracteres;
}
public void insertString(int offs,String str,AttributeSet a)throws BadLocationException
{
if ( getLength() + str.length() > limiteDeCaracteres )
{
java.awt.Toolkit.getDefaultToolkit().beep();
}
else
{
insertString(offs,str,a);
}
}// fin metodo
}// fin clase
/*, para usar esta clase tienes que hacer lo siguiente:
import javax.swing.*;
public class Prueba {
public static void main( String [] a ){
// este sera un limitador para 20 caracteres
LimitadorDeTexto limitador = new Limitador(20);
JTextField campo = new JTextField();
campo.setDocument(limitador);
// esto es para mostrarlo
JOptionPane.showMessageDialog(null,campo);
System.exit(0);
}
}
y listo, pruebalo y veras que no te deja meter más de 20 caracteres.
*/
Bueno pues yo he probado a crear esa clase LimitadorDeTexto y... Me da error en la primera linea en AbstractDocument. (El error dice que: inserte una interface). Yo la verdad es que no tengo mucha idea de todo esto y no consigo solucionarlo.
¿Podrías echarme un cable?
Gracias

1 respuesta

Respuesta
1
Aquí tienes otra versión mejorada de esa clase, usa mejor esta:
import java.awt.*;
import javax.swing.text.*;
public class LimitadorDeDocumento extends DefaultStyledDocument {
int caracteresMaximos;
public LimitadorDeDocumento( int caracteresMaximos ) {
this.caracteresMaximos = caracteresMaximos;
}
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if ( str.indexOf("?") == -1 && str.indexOf("?") == -1 && (getLength() + str.length()) <= caracteresMaximos)
super.insertString(offs, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
}
para usar esta clase, crea otra con esto...
import javax.swing.*;
public class Prueba {
public static void main( String [] a ){
// este sera un limitador para 20 caracteres
LimitadorDeDocumento limitador = new LimitadorDeDocumento(20);
JTextField campo = new JTextField();
campo.setDocument(limitador);
// esto es para mostrarlo
JOptionPane.showMessageDialog(null,campo);
System.exit(0);
}
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas