JText com letras maiusculas

12 respostas
cardosodario

Como eu crio um novo objeto JText que permita que eu digite apenas letras maiusculas sem usar o esquema de maskaras?

Dario

12 Respostas

U

Fiz uma vez assim:

teuJText.setText(teuJText.getText().toUpperCase());

coloquei no evento de teclado

ao digitar aparece minuscula em seguida transforma

acredito que tem forma melhor

ViniGodoy

Tente pressionar CTRL+C e depois CTRL+V no JTextField e veja se ele ainda transforma em maiúsculas…

A melhor forma é modificando o Document. Além de garantir contra o CTRL+C e CTRL+V, ele não daria esse efeito que vc falou, do usuário ver a letra mudando. Esse tutorial ensina justamente a controlar um JTextField e usar um Document:
http://www.guj.com.br/java.tutorial.artigo.29.1.guj

Mas, basicamente, você vai criar essa classe:

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

public class UpperCaseDocument extends PlainDocument {
    @Override
    public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException {
        super.insertString(offset, str.toUpperCase(), attr);
    }
}

E depois associa-la ao seu JTextComponent:

seuTextField.setDocument(new UpperCaseDocument());
cardosodario

Amigo,

Quando eu tento compilar o exemplo recebo este erro:

F:\JAVA\Fatura\src\Funcoes\Entryfields.java:8: call to super must be first statement in constructor
super(offset, str.toUpperCase(), attr);
1 error


package Funcoes;

import javax.print.attribute.AttributeSet;
import javax.swing.text.PlainDocument;

public class Entryfields extends PlainDocument {
   public void insertString(int offset, String str, AttributeSet attr) {
      super(offset, str.toUpperCase(), attr);
   }
}
victor_java

Meu caro cardosodario:

Tenta modificar a linha 8 do seu código para:

super.insertString(offset, str.toUpperCase(), attr);

Não fiz o teste aqui, mas creio que deve funcionar.

Reilander

o victor esta certo.
nesse caso, voce esta chamando o construtor de PlainDocument, com super().
com super.insertString() voce esta chamando o metodo de PlainDocument.

cardosodario

Mesmo assim continua dando erro só que agora é outro, veja:

Compiling 1 source file to F:\JAVA\Fatura\build\classes

F:\JAVA\Fatura\src\Funcoes\UpperCaseDocument.java:8: cannot find symbol

symbol  : method insertString(int,java.lang.String,javax.print.attribute.AttributeSet)

location: class javax.swing.text.PlainDocument

super.insertString(offset, str.toUpperCase(), attr);

1 error

BUILD FAILED (total time: 4 seconds)
package Funcoes;

import javax.print.attribute.AttributeSet;
import javax.swing.text.PlainDocument;

public class UpperCaseDocument extends PlainDocument {
   public void insertString(int offset, String str, AttributeSet attr) {
       super.insertString(offset, str.toUpperCase(), attr); 
   }
}
netShot

Tenta assim :

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

public class UpperCaseLetter extends PlainDocument {
    
    @Override
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        super.insertString( offs, str.toUpperCase() , a );
    }

}

Exemplo de uso (o mesmo) :

seuTextField.setDocument(new UpperCaseLetter());
Reilander

eh que tem uma excecao checada que esse metodo lanca.
se voce o chamar, ou voce o lanca, como o fez o cara ai de cima,
ou tu trata:

public void insertString(int offs, String str, AttributeSet a) { try { super.insertString(offs, str, a); } catch (BadLocationException e) { // tratamento } }

cardosodario

Legal, agora funcionou

Eu notei que com o offs eu posso limitar o conteudo do campo que vai ser digitado, como que eu faço para passar por parametro para esta função o tamanho do campo que eu quero limitar através da chamada new …???

ViniGodoy

Cara, lê o tutorial que eu te passei ali em cima…

http://www.guj.com.br/java.tutorial.artigo.29.1.guj

Ele explica exatamente isso!!!

Aliás, também corrigi o código ali em cima. :slight_smile:

cardosodario

Entendi agora, obrigado.

Com base neste exemplo de fixar o tamanho de caracteres fiz um outro exemplo que me permite digitar datas travando apenas a inserção de numeros e complementando automaticamente as barras para não usar o esquema de mascaras.
Agora gostaria de entender como anexar neste exemplo o evento lostFocus para que eu verifique ao sair do campo se a data digitada é válida alguém tem alguma dica???

Dario

ViniGodoy

Não use o lostFocus. Use um InputVerifier.
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/InputVerifier.html

Basicamente, é só tentar converter o que foi digitado para data. Se não conseguir, retorne false no método verify.

Criado 1 de maio de 2008
Ultima resposta 5 de mai. de 2008
Respostas 12
Participantes 6