[Resolvido] - Criando regra em uma classe com o PlainDocument

Boa tarde, tenho uma classe que faz um extends de um JTextField, estou tentando implementar uma regra com o PlainDocument com o objetivo de deixar a primeira letra de cada frase em maiúscula. Assim toda vez em que instanciar um atributo do tipo dessa classe ele já venha com essa regra. O problema é que não está ocorrendo a alteração, alguém sabe me dizer onde estou errando? Obrigado!


class MeuDocument extends PlainDocument {
    String str = null;
    
    public String insertString() {
        
        char[] letras = str.toCharArray();   
        for (int i = 0; i < letras.length; ++i) {   
           if (i == 0 || !Character.isLetterOrDigit (letras[i-1])) {   
                 letras[i] = Character.toUpperCase (letras[i]);   
           }   
        }   
        return new String (letras);
    }
}

Estava pesquisando e encontrei algo referente ao commons.lang, baixei e adicionei a biblioteca e modifiquei o código, mas nada acontece :S

class MeuDocument extends PlainDocument {

        public void insertString(String str, AttributeSet a) {
            try {
                str = str.toLowerCase();
                str = WordUtils.capitalize(str);
                super.insertString(0, str, null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

acho que o problema ta no metodo insertString.

tu ta fazendo override?

a assinatura do insertString é diferente.

Para realizar um Override correto do método insertString() você deve declara-lo da seguinte forma:

public void insertString(int offset, String str, AttributeSet attr) {

}

Em seguida no seu JTextField você deve informar o Document da seguinte forma:

JTextField txtNome = new JTextField();
txtNome.setDocument(new ClasseDoDocumento());

Obrigado pelo esclarecimento Strikezado, não estava setando o Document, vou fazer as alterações e verificar.

Valeu!

Boa tarde pessoal, a regra está quase funcionando acontece que da forma que está ele está transformando a frase toda em maiúsculo e ao contrário, estranho isso, quando eu começo a digitar no campo sai o seguinte: digito JAVA, e sai AVAJ.

class MeuDocument extends PlainDocument {

        public void insertString(int offset, String str, AttributeSet attr) {
            try {
                str = str.toLowerCase();
                str = WordUtils.capitalize(str);
                super.insertString(0, str, attr);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Alguém sabe me dizer onde estou errando? É a primeira vez em que uso o PlainDocument e o commons.lang.WordUtils :S

class MeuDocument extends PlainDocument {   
  
        public void insertString(int offset, String str, AttributeSet attr) {   
            try {   
                 if(!str.length() > 1){
                     str = str.toLowerCase();   
                  }
                  str = WordUtils.capitalize(str);   
                  super.insertString(0, str, attr);
            } catch (Exception e) {   
                e.printStackTrace();   
            }   
        }   
    }

Com esta verficação acredito que resolva seu problema…

Blz Diego, está dando erro na linha 5. Operator! cannot be applied to int.

class MeuDocument extends PlainDocument {     
     
        public void insertString(int offset, String str, AttributeSet attr) {     
            try {     
                 if(str.length() <= 1){
                     str = str.toLowerCase();     
                  }   
                  str = WordUtils.capitalize(str);     
                  super.insertString(0, str, attr);   
            } catch (Exception e) {     
                e.printStackTrace();     
            }     
        }     
    }  

Obrigado pela ajuda Diego, mas o texto continua todo em maiúsculo e ao contrário. Estou fazendo novas pesquisas, caso eu encontre algo eu faço o post.

Bom dia Carlos, agora segue funcionando da forma que deseja.

[code]
class MeuDocument extends PlainDocument {

    public void insertString(int offset, String str, AttributeSet attr) {       
        try {       
             if(offset <= 0){   
                 str = str.toUpperCase();       
              }     
             // str = WordUtils.capitalize(str);       
              super.insertString(offset, str, attr);     
        } catch (Exception e) {       
            e.printStackTrace();       
        }       
    }       
} [/code]

Valeu Diego, acredito que um laço de repetição para verificar onde há espaço deve resolver para o restante da frase.

Encontrei um conteúdo sobre o WordUtils.capitalizeFully, onde: “Converte todas as palavras em branco separados em um String em palavras em maiúsculas, isto é, cada palavra é composta de um personagem titlecase e depois uma série de caracteres minúsculos. Espaço em branco é definida por Character.isWhitespace (char). Capitalização usa o caso de título unicode, normalmente equivalente a maiúsculas.”

Ex: WordUtils.capitalizeFully (“Eu estou bem”) = “Eu Estou Bem”

Mas quando eu utilizo, a frase toda fica em maiúsculo, estranho isso, mas deve estar faltando implementar o Character.isWhitespace…

Valeu mesmo pela ajuda Diego!

[quote=CarlosAlexandre]Valeu Diego, acredito que um laço de repetição para verificar onde há espaço deve resolver para o restante da frase.

Encontrei um conteúdo sobre o WordUtils.capitalizeFully, onde: “Converte todas as palavras em branco separados em um String em palavras em maiúsculas, isto é, cada palavra é composta de um personagem titlecase e depois uma série de caracteres minúsculos. Espaço em branco é definida por Character.isWhitespace (char). Capitalização usa o caso de título unicode, normalmente equivalente a maiúsculas.”

Ex: WordUtils.capitalizeFully (“Eu estou bem”) = “Eu Estou Bem”

Mas quando eu utilizo, a frase toda fica em maiúsculo, estranho isso, mas deve estar faltando implementar o Character.isWhitespace…

Valeu mesmo pela ajuda Diego! [/quote]

Olha eu novamente…
Se não for agora eu desisto… shushus

[code]
class MeuDocument extends PlainDocument {
private boolean next = false;
private int contr = 0;
public void insertString(int offset, String str, AttributeSet attr) {
contr = 0;
try {
if(offset <= 0){
str = str.toUpperCase();
}
if(" ".equals(str)){
next = true;
contr ++;
}
if(next && contr == 0){
str = str.toUpperCase();
next = false;
}

             // str = WordUtils.capitalize(str);       
              super.insertString(offset, str, attr);     
        } catch (Exception e) {       
            e.printStackTrace();       
        }       
    }       
}    [/code]

hfaishdfiasd, foi mal ae Diego, agora sim!!

Valeu mesmo cara!

Opa, blz…
Boa sorte, precisando pode contar