Como eu crio um novo objeto JText que permita que eu digite apenas letras maiusculas sem usar o esquema de maskaras?
Dario
Como eu crio um novo objeto JText que permita que eu digite apenas letras maiusculas sem usar o esquema de maskaras?
Dario
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
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());
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);
}
}
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.
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.
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);
}
}
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());
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
}
}
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 …???
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. 
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
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.