Usar duas class em um JTextfield

28 respostas
Naruto

Boa Noite…
galera assim tenhu uma classe que limita q quantidade de digitos e outra para deixa os JTextfield com uppercase…
ai eu passo elas assim…

<blockquote>private JTextField getEdtnome() {

if (edtnome == null) {

edtnome = new JTextField();

edtnome.setBounds(new Rectangle(109, 47, 455, 20));
edtnome.setDocument(new FixedLengthDocument(50));
		edtnome.setDocument(new UppeCase());

	}
	return edtnome;</blockquote>

mais so funciona um setDocument… que é o ultimo… o primeiro ele desconsidera :confused:
gostaria que funcionasse os dois… sera que tem outro metodo??
vlwwwww

28 Respostas

malves_info

Sim claro que ele vai utilizar o ultimo setDocument se vc no primeiro setDocument passa um objeto por parametro e dps utiliza o mesmo metodo para passar outro objeto por parametro ele vai considerar a ultima instancia.
Ex. simples:

public void setObejto(Object teste){
            objetoTeste = teste
   }

   public void fazAlgumaCoisa(){
         setObjeto(new meuObjeto1);
         setObjeto(new meuObjeto2); //meuObjeto1 é "removido" para a criação do meuObjeto2
 
  }
Naruto

e como eo poderia resolver isso???

malves_info

Em que situação vc utilizaria o: edtnome.setDocument(new FixedLengthDocument(50));
E o: edtnome.setDocument(new UppeCase());

???

Naruto

então acho que seria na mesma hora ne? pois uma vai fazer o texto fika uppercase e a outra limita a quantidade de digitos…

malves_info

Cara você pode utilizar uma KeyListener para verificar a quantidade de chars que o cara ta digitando é uma opção, ae vc utilizaria o setDocument para o UpperCase

xwillianss

Naruto:
Boa Noite…
galera assim tenhu uma classe que limita q quantidade de digitos e outra para deixa os JTextfield com uppercase…
ai eu passo elas assim…

<blockquote>private JTextField getEdtnome() {

if (edtnome == null) {

edtnome = new JTextField();

edtnome.setBounds(new Rectangle(109, 47, 455, 20));
edtnome.setDocument(new FixedLengthDocument(50));
		edtnome.setDocument(new UppeCase());

	}
	return edtnome;</blockquote>

mais so funciona um setDocument… que é o ultimo… o primeiro ele desconsidera :confused:
gostaria que funcionasse os dois… sera que tem outro metodo??
vlwwwww

O objeto edtnome esta sendo usado antes de ser instanciado
tente declarar o objeto antes para depois utiliza-lo.

netShot

pq não cria um document só ?

tipo:

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class UpperCaseLetter extends PlainDocument {

    private Boolean toUp;
    private int maxLenght;

    public UpperCaseLetter(int maxlenght, Boolean upcase) {
        // seta variaveis
    }    

    @Override
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
         // codigo aqui

        super.insertString( offs, str , a );
    }

}
malves_info

xwillianss a Instancia do Objeto dele ta certa ele utiliza antes somente para verificar se o mesmo esta setado como null para que não seja criado quando for utilizado mais de uma vez.

Naruto

puts nem consegui o.O

malves_info

Tentou utilizar um evento para o teu text aonde verique quantos digitos o cara ta digitando e dependendo da quantidade ele bloquear?

xwillianss

Tente usar assim:

import java.awt.Rectangle;
import javax.swing.JTextField;

public class UpperSize {
    private JTextField edtnome;
    
    public UpperSize(){
        this.edtnome = new JTextField();
    }
    
    private static javax.swing.JTextField getEdtNome(){
        if(this.edtnome == null){
            this.edtnome.setBounds(new Rectangle(109,47,455,20));
            this.edtnome.setDocument(new FixedLengthDocument(50));
            this.edtnome.setDocument(new UppeCase());
        }
        return this.edtnome;
    }
}
xwillianss

Há sim sei…

malves_info

Isso funcionou pra vc xwillianss ?

xwillianss

rsrrs… para mim não. Não tenho os métodos FixedLengthDocument e UppeCase aqui. Mas acho que ele tem.

malves_info

Isso que vc postou é praticamente a mesma coisa que ele esta fazendo, volto frizar que! quando vc instancia um objeto ex.: obj1 e dps instandica outro objeto do mesmo tipo ex.: obj2 o obj1 não vai existir referencia pra ele. Utilizando o método setDocument duas vezes seguidas passando um objeto por parametro ele vai considerar a ultima instancia.

Por isso dei a ideia pra ele controlar a quantidade de caracter digitado no campo em um evento e o UpperCase ele pode setar no metodo setDocument.

netShot

pq não faz assim:

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class MyDocument extends PlainDocument {
	private static final long serialVersionUID = 1L;
	private int iMaxLength;
	private Boolean toUperCase;

	public MyDocument(int maxlen, Boolean upCase) {
		super();
		iMaxLength = maxlen;
		toUperCase = upCase;
	}

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

		if (toUperCase) // maiusculo ??
			str = str.toUpperCase();

		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);
		}
	}

}

Pra usar:

seuTextField.setDocument(new MyDocument(30, true));
xwillianss

malves_info:
Isso que vc postou é praticamente a mesma coisa que ele esta fazendo, volto frizar que! quando vc instancia um objeto ex.: obj1 e dps instandica outro objeto do mesmo tipo ex.: obj2 o obj1 não vai existir referencia pra ele. Utilizando o método setDocument duas vezes seguidas passando um objeto por parametro ele vai considerar a ultima instancia.

Por isso dei a ideia pra ele controlar a quantidade de caracter digitado no campo em um evento e o UpperCase ele pode setar no metodo setDocument.

Pensei outra coisa… foi mal

H

tb concordo c o malves, n vejo outra forma de fazer isso, a n ser fazendo um por eventos e outro usa o metodo citado…eu faria td por evento na verdade :smiley:

Naruto

netShot:
pq não faz assim:

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class MyDocument extends PlainDocument {
	private static final long serialVersionUID = 1L;
	private int iMaxLength;
	private Boolean toUperCase;

	public MyDocument(int maxlen, Boolean upCase) {
		super();
		iMaxLength = maxlen;
		toUperCase = upCase;
	}

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

		if (toUperCase) // maiusculo ??
			str = str.toUpperCase();

		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);
		}
	}

}

Pra usar:

seuTextField.setDocument(new MyDocument(30, true));

netShot blz???

cara so naum entendia esta linha …

if (toUperCase)// maiusculo ??
str = str.toUpperCase();

c podia me explicaR??
vlwww

malves_info

toUperCase é um booleano que recebe true ou false no construtor , ele deve indicar se aquela String vai poder ser modificada para UpperCase

Naruto

vc fala assim eu verificar assim:

if (toUperCase == true)
str = str.toUpperCase();

Naruto

so que ele naum aceita eu fazer isso

malves_info

Como assim não aceita??? vc esta passando no parametro do contrutor oque? True? False?

Naruto

true c ele for true ele executa a linha de baixo trannformando a string em uppercase mais naum sei pq que ele da erro passo assim

if (toUperCase == true)

malves_info

Que erro?!

Fernando_Generoso_da

Qual versão do java vc está usando?? 1.4??

Se for, para o exemplo é necessário utilizar a 1.5 por causa do autoboxing, ou…

utilizar desse jeito:

if (toUperCase.booleanValue() == true)
Naruto

caraaaaaaa que erro fatal rsrsrss

é que as variaveis estava sendo declarada assim Boolean rsrsrsrs ai mudei para boolean rsrsrs
:smiley:
vlwww vamos ver c da certo agora
ai ja posto

Naruto

bom aparentemente esta funcionado :smiley: mais so que esses dias tinha feito uma coisa parecida so que me gero o seguinte problema depois qu eue fechei o eclipse e abri de novo meu form naum era mais mostrado o.O e so mostro depois que eu tirei isso o.O mais eu etstei fechei e abrir e estava normal o.O qq coisa eu posto de novo…
vlww a todos

Criado 22 de julho de 2008
Ultima resposta 23 de jul. de 2008
Respostas 28
Participantes 6