Tornar caracteres digitados em maiúsculo e já limitar a digitação no JtextField

Olá pessoal, peguei está classe aqui no forum mesmo, ela transforma caracteres digitados em maiúsculo, eu gostaria de alterá-la para que limitasse também a digitação de caracteres nela, alguém poderia me ajudar?
muito obrigado.

i[b]mport javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;

public class UpperCaseField extends JTextField {

public static Object psq;

 public UpperCaseField(int cols) {
     super(cols);
 }

 protected Document createDefaultModel() {
     return new UpperCaseDocument();
 }

 static class UpperCaseDocument extends PlainDocument {

     public void insertString(int offs, String str, AttributeSet a)
         throws BadLocationException {

         if (str == null) {
             return;
         }
         char[] upper = str.toCharArray();
         for (int i = 0; i < upper.length; i++) {
             upper[i] = Character.toUpperCase(upper[i]);
         }
         super.insertString(offs, new String(upper), a);
     }
 }

}
[/b]

Tenho uma classe que faz isso.
veja se te ajuda.

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

/**
 * 
 * @author Airton
 *
 */
public class MaiusculaLimitadaAsg  extends PlainDocument {

	private int tamanhoMaximoString;

	// Booleano opcional caso queira tornar tudo maiúsculo
	private boolean maiuscula = false;

	public MaiusculaLimitadaAsg(int tamanhoMaximoString) {
		super();
		this.tamanhoMaximoString = tamanhoMaximoString;
	}

	public MaiusculaLimitadaAsg(int tamanhoMaximoString, boolean maiuscula) {
		super();
		this.tamanhoMaximoString = tamanhoMaximoString;
		this.maiuscula = maiuscula;
	}

	public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
		if (str == null) return;
		
		if ((getLength() + str.length()) > tamanhoMaximoString){
			str = str.substring(0,tamanhoMaximoString - getLength());
		}
		if ((getLength() + str.length()) <= tamanhoMaximoString) {
			if (maiuscula){
				str = str.toUpperCase();
			}
			super.insertString(offset, str, attr);
		}
	}
}

para utilizar esta classe faça assim.

txtCampoTexto.setDocument
        (new MaiusculaLimitadaAsg(30, true));

Espero ter ajudado…

amigo, faça o seguinte, pegue sua string e passa como

 this.minhaString.toUpperCase() 

Isso resole a questao do Maiuscula.

abraços,

Cara da uma olhada nesse tópico acho que pode te ajudar também.

http://www.guj.com.br/posts/list/37077.java

A questão da exibição no TextField em maiúsculo trata-se de um padrão de visualização do sistema do colega que postou. Por isso, não basta toUpperCase, afinal, se o sistema acessar banco de dados com dados fora do padrão, o ajuste para letra maiúsuca fica automatico e, até, ja corrige o proprio banco em questão =).

abraços…

ok Airton, perfeito… muito obrigado.

não querendo abusar vc postou corretamente seu código fonte no forum, eu li o post referente
a isso mas não entendi, como vc fez? obrigado.

Este método insertString, é o responsável por inserir o texto no seu componente, na verdade quando você vê aquele campo texto, ele é um objeto composto, e uma de suas partes é o Documento “Document.class (Interface)”, ali contém os métodos que irá gerenciar os dados que serão tratados neste componente texto.
Se você olhar a hierarquia (Caso não tenha busque na Documentação no site da SUN) a classe PlainDocument Herda de AbstractDocument que implementa Document, logo eu herdo de plainDocument e sobreescrevo o método insertString, faço o tratamento que quiser com o texto antes de ser inputado no Componente, e depois chamo o método de super (Classe pai).

Não sei se consegui esclarecer, sou péssimo em explicar… Não fui contemplado com este dom hehehehe.

Espero ter ajudado.

ok obrigado.