JFormattedTextField - UpperCase [RESOLVIDO]

Olá galera
tenho uma duvida, vi em alguns foruns e tudo mais, a questao de formatar um jformattedtextfield para letras e numeros, a questao de numeros Ok, mas para formatar somente com letras em maiusculo, eu nao consigo, pois existe expliçoes para passar no estilo da formataçao (isso usando tudo parte visual, sem nada de codigo e usando o netbeans), passando o “U”, quantas vezes forem necessarias para que todas as letras fiquem em maiusculo, porem passando o “U” nao aceita espaços nem nada

Alguem sabe alguma forma de como fazer isso, nao sendo em funçao, pois teria muitos campos e teria que chamar a mesma funçao no caso para todos eles.

Grato

Se você olhou a documentação de JFormattedTextField e MaskFormatter, vai ver que não há um modificador que faça o que você quer (converter uma letra para maiúsculo, e aceitar também números e espaços). Argh

http://java.sun.com/javase/6/docs/api/javax/swing/text/MaskFormatter.html

Provavelmente você precisa de uma outra coisa - usar um JTextField mesmo, mas com um Document diferente. Veja o Javadoc de JTextField, e veja a classe UpperCaseField, que seria um JTextField que passa tudo para maiúsculas.

http://java.sun.com/javase/6/docs/api/javax/swing/JTextField.html

É relativamente simples você fazer isso: crie essa classe UpperCaseField no seu projeto, e então você pode até inserir uma instância dessa classe nos seus forms, pondo-a na palette do NetBeans, por exemplo. É mais fácil que mexer campo por campo na máscara do JFormattedTextField.

entanglement , obrigado pelas dicas.

Sou novo na questao java, entao tenho me perdido um pouco nessas questoes que sao mais “visuais”.
Observei o teu segundo link, e achei bem interessante quando citou logo abaixo a questao intanciar a classe nos forms e adicionar a palette do netbeans,
como que eu poderia fazer isso, achei a ideia super inteligente e gostaria de implementar, estou fazendo um sistema onde vai ter varios casos desses, onde vou necessitar um uppercase, apos eu criar essa classe abaixo, o que devo fazer para adicionar a palette?

Desculpe pela ignorancia das perguntas.

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

/**
 *
 * @author Josivan
 */
public class ClassUpperField extends JTextField {
    public ClassUpperField(int cols) {
         super(cols);
     }

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

     static class UpperCaseDocument extends PlainDocument {

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

Para poder pôr essa classe na palette do NetBeans, ela precisa ter um construtor sem parâmetros. Só dar uma alteradinha:

 public  class ClassUpperField extends JTextField {  
     public ClassUpperField() {  
          super();  
      }  
     // o resto continua igual...
     public ClassUpperField(int cols) {  
          super(cols);  
      }  

Feito isso, arraste essa classe para a palette (se não me engano é isso, se não for isso, clique com o botão direito na palette e veja se aparece algum diálogo para acrescentar novas classes), e então arraste um elemento da palette para o seu formulário.

entanglement, muito obrigado, funcionou perfeitamente, nao sabia que seria assim tão show de bola! ;D

Obrigado!
Abraços, Josivan!

coloca [RESOLVIDO] no titulo do post…
vlw