Tenho a necessidade de que o tamanho máximo digitado em um campo JTextField seja de 20 caracteres. Alguém poderia me dar um exemplo de como posso determinar esta limitação.
Grato.
Tenho a necessidade de que o tamanho máximo digitado em um campo JTextField seja de 20 caracteres. Alguém poderia me dar um exemplo de como posso determinar esta limitação.
Grato.
eh preciso criar um Listener para controlar isso
aqui vai o codigo de um:
/*
* LimitaTamanho.java 28/09/2003
*/
import java.awt.TextField;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
/**
* A classe <code>LimitaTamanho</code> é capaz
* de controlar o número máximo de caracteres
* que podem ser digitados em um <code>TextField</code>.
* <p>
* Exemplo de utilização:<pre>
* <code>
* TextField textf = new TextField();
* //Número máximo de 10 caracteres.
* LimitaTamanho l = new LimitaTamanho(textf,10);
* </code></pre></p>
*
* @see java.awt.TextField
* @author Denis Santos
* @author Renato Simões
*/
class LimitaTamanho implements KeyListener{
/**
* O <code>TextField</code> a ser controlado.
*/
TextField Ttext;
/**
* O número máximo de caracteres.
*/
int tamanho;
/**
* Cria uma instância de <code>LimitaTamanho</code>
* para o <code>TextField</code> dado com o número
* máximo de caracteres dado.
*
* @param Ttext o <code>TextField</code> a ser controlado.
* @param tamanho o número máximo de caracteres.
*/
public LimitaTamanho(TextField Ttext,int tamanho){
this.Ttext = Ttext;
this.tamanho = tamanho;
Ttext.addKeyListener(this);
}
/**
* Sobreescrito da interface <code>KeyListener</code>.
* Invocado quando um caracter é digitado.
*/
public void keyTyped(KeyEvent e){
if(e.getKeyChar()!= KeyEvent.VK_BACK_SPACE){ // deixa o usuário digitar backspace
if(e.getSource().equals(Ttext))
if(Ttext.getText().length()>tamanho){
Ttext.setText(Ttext.getText().concat(Character.toString(e.getKeyChar())));
e.setKeyChar(' ');
Ttext.transferFocus();
//e.consume();
}
else if(Ttext.getText().length()>=tamanho){
e.setKeyChar(' ');
e.consume();
}
}
}
public void keyReleased(KeyEvent e){}
public void keyPressed(KeyEvent e){}
}
se ajudar… basta voce modifica-lo de TextField para JtextField
assim é mais simples:
import javax.swing.text.*;
public class Limitador extends PlainDocument {
private static final int limite = 4; /* Máximo de caracteres permitidos */
/* Método chamado quando se tenta inserir um texto */
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
/* Calcula quantos caracteres podem ser inseridos antes de atingir o limite */
int sobra = limite - getLength();
/* Calcula o comprimento máximo da string que pode ser inserida, sem que o limite seja quebrado. Se ainda puderem ser inseridos dois caracteres, mas alguém tentar inserir a string "abcd", isto vai fazer com que somente a string "ab" seja inserida */
int comprimento = (sobra > str.length())?str.length():sobra;
/* Isso faz com que a string resultante seja realmente inserida */
super.insertString(offs, str.substring(0, comprimento), a);
}
}
altere o atributo limite para o máximo de caracteres que vc quer permitir que sejam adicionados.
daí vc constrói o JTextField usando o construtor JTextField(Document doc, String text, int columns);
no parametro doc, passe uma instancia da classe Limitador, e nos parametros text e columns, vc usa oq for melhor pra vc.