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

14 respostas
CarlosFontana

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

14 Respostas

CarlosFontana

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

acho que o problema ta no metodo insertString.

tu ta fazendo override?

a assinatura do insertString é diferente.

S

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());
CarlosFontana

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

Valeu!

CarlosFontana

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

diego.sas
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…

CarlosFontana

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

diego.sas
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();     
            }     
        }     
    }
CarlosFontana

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.

diego.sas
CarlosAlexandre:
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.
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();       
            }       
        }       
    }
CarlosFontana

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!

diego.sas
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!

Olha eu novamente... Se não for agora eu desisto... shushus
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();       
            }       
        }       
    }
CarlosFontana

hfaishdfiasd, foi mal ae Diego, agora sim!!

Valeu mesmo cara!

diego.sas

Opa, blz…
Boa sorte, precisando pode contar

Criado 10 de dezembro de 2011
Ultima resposta 13 de dez. de 2011
Respostas 14
Participantes 4