JTextField DEFINIR TAMANHO MAXIMO DE CARACTER

15 respostas
S

Olá

Eu preciso definir que por exemplo no meu TextField so possa ser digitado 5 caracter
So que não estou conseguindo fazer isso, ja tentei setColunns() e tambem ja tentei trocar para o FormatterField o problema doJFormattedTextField é que se nao for digitado os 5 ele da problema na hora de eu dar o get para pegar o texto.

O que eu faco? help

15 Respostas

O

ae cara…
num sei se vai ajudar mas faz o seguinte…
la nos eventos do TextField…tu clica em keypressed dai vai gerar uma funçaozinha q vai ser chamada toda vida q um tecla for pressionada na TextField…tu ja deve sakar isso…se nao, sakou agora :wink: poiseh…lah na funcao tu poe o seguinte…

===================================

if (NomedoTextField.getText().length > 5) {
NomedoTextField.setText(NomedoTextField.getText().substring(0,4));

===================================

pronto!! isso ae talvez de ajude cara!! flw

P

Cara…eu também tava com esse problema…
dae achei isso aqui e funcionou…curte ae…

import javax.swing.*;
import javax.swing.text.*;

public class FixedLengthDocument extends PlainDocument
{
    private int iMaxLength;

    public FixedLengthDocument(int maxlen) {
        super();
        iMaxLength = maxlen;
    }

	public void insertString(int offset, String str, AttributeSet attr)
	throws BadLocationException {
    	//if (s == null) return;

    	if (iMaxLength <= 0) // aceitara qualquer no. de caracteres
    	{
        	super.insertString(offset, str, attr);
        	return;
    	}

    	int ilen = (getLength() + str.length());
    	if (ilen <= iMaxLength) // se o comprimento final for menor...
        	super.insertString(offset, str, attr); // ...aceita str
    	else
    	{
       	 	if (getLength() == iMaxLength) return; // nada a fazer
        	String newStr = str.substring(0, (iMaxLength - getLength()));

        	super.insertString(offset, newStr, attr);
    	}
    }
}

dae você coloca assim no seu TextField

TextField.setDocument(new FixedLengthDocument(valor máximo de caracteres));

Ve se funciona ae…
[]'s

M

JTextField nameField = new JTexField(5)

eu sei… você quer se esganar :slight_smile:

P

UAHeuHUAE…
eu também não sabia que só isso ae resolvia…
UAeUHEUAheAE…no começo do ano eu tava fazendo um trabalho da faculdade e usei esse código todo ae…
mas é sempre assim…
vivendo e aprendendo…

M

hehehehe, eu ja fiz cada coisa que vocês nem acreditam uhasudSUHADUHASUHDasuh
mas com o tempo a gente vai aprendendo algumas coisas ( principalmente olhando o ctrl+SPACE do eclipse )
uhuAuhsuhdsuahudhdasuh flw :slight_smile:

J

“MurrayBR”:
JTextField nameField = new JTexField(5)

eu sei… você quer se esganar :)

isso nao funciona pra travar o maximo de caracteres

P

Po…se não funciona tem que ser mesmo esse código grande que eu fiz ae?

J

sim
o idel eh ter seu proprio modelo de documento .

so q o seu metodo insertString pode ser reduzido um pouco
mas o jeito q vc coloco ta mto bom sim…
:slight_smile:

[]'s

M

nem vou ser cretino em falar que aqui funcionou, eu tinha lido num livro, dai eu vi e coloquei mas nunca testei :slight_smile:

J

pois eh velho…eh estranho essa api
tpo na api fala q eh o numero de colunas
mas eu tb nao faco a minima noçaum pra q serve definir um numero x de colunas

se eu definir 10 colunas pro textfield .e nao colocar eu nao vi diferença velho :frowning:

se alguem souber ai posta ai
acho que o valor padrao eh 0

M

Bem ja tive esse problema, eu passei a usar o JFormattedTextFild, achei bem melhor porque posso modelar o meu textfild, do tipo, se usar para fazer um cadastro e preciso do telefone do cara e do CPF, o formata já vem predefinido, de acordo com a programação. E isso vale tambem para o numero de caracterers digitados.

Se alguem precisar do codigo me da um toque ai que eu posto.

fui…

T

Esse número de colunas que é passado para o construtor do JTextField serve só pra calcular a largura preferida do componente. Esse cálculo é feito multiplicando-se a largura da letra ‘m’ pelo número de colunas (ver java.awt.FontMetrics.charWidth(char)).

S

“marsola”:
Bem ja tive esse problema, eu passei a usar o JFormattedTextFild, achei bem melhor porque posso modelar o meu textfild, do tipo, se usar para fazer um cadastro e preciso do telefone do cara e do CPF, o formata já vem predefinido, de acordo com a programação. E isso vale tambem para o numero de caracterers digitados.

Se alguem precisar do codigo me da um toque ai que eu posto.

fui…


Bom tambem ja usei o JFormattedTextFild so que o seguinte tem como eu fazer com que nao aparareca a foramtacao tipo a do cpf ###.###.###-## quer dizer que nao aparece os pontos e o - antes que seja digitado os numeros ou melhor so apareca quando for digitado o numero e ai aparece tipo 123.125. e depois vai aparecendo o resto?

E outra para pegar o conteudo do campo se eu der um getText() ele pega todo o conteudo se eu quiser pegar so os numeros como eu faco?
Tem uma propriedade do JFormattedTextFild ou eu tenho que fazer um metodo que compara caracter por caracter?
Ah para inserir o formato eu usei assim

MaskFormatter formatter = new MaskFormatter("###.###.###-##"); formatter.install(jFormattedTextFild ); tem alguma propriedade do JFormattedTextFild que posso setar direto o formato do texto, se tem qual e?

M

Bem, quando precisei usei esse codigo aqui

public void MascararCampo(){
        javax.swing.text.MaskFormatter Campo = new javax.swing.text.MaskFormatter("###");
        
        jFormattedTxtFild = javax.swing.JFormattedTextField(Campo);
    }

e depois chamei o metodo dentro do init. Voce pode fazer sem que aparece os pontos, basta dentro de javax.swing.text.MaskFormatted("###.###"), ira aparecer somente o que vc setar dentro dele, somente isso.
Voce pode criar uma variavel para pegar o valor de dentro deste campo e imprimir em outro lugar, ou salvar em um db, como vc quiser, por exemplo:

String valor;
txt_campo = getText();
Voce pegou o que vc digitou no campo. Caso nao tenha sido claro ou ter falado alguma besteira me ajudem tb !
rsrsrs

[]s
Marsola

S

Bom igual ao meu tambem funciona ,mas se for para formatar campos que tenha que aparacer o ponto ###.### (123.512) e este ponto so aparecer depois de tres numero tipo 1.255 nao funciona, alguem sabe como fazer isso?
e ainda depois que digitei 123.655 tem algum metodo que retorne 123655?? poi o getText te retorna 123.655!

Criado 3 de dezembro de 2004
Ultima resposta 8 de dez. de 2004
Respostas 15
Participantes 7