JTextField - Determinando o tamanho máximo

2 respostas
V

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.

2 Respostas

D

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

M

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.

Criado 5 de fevereiro de 2005
Ultima resposta 6 de fev. de 2005
Respostas 2
Participantes 3