(resolvido) Aceitar apenas letras maiusculas no JtextField

9 respostas
jonasjgs2

alguem pode me ajudar

por favor?

9 Respostas

ViniGodoy

http://www.guj.com.br/articles/29

tguerra

Oi, jonasjgs2.

Já deu uma olhada no Class JTextField?
Espero que ajude.

Customized fields can easily be created by extending the model and changing the default model provided. For example, the following piece of code will create a field that holds only upper case characters. It will work even if text is pasted into from the clipboard or it is altered via programmatic changes.
public class UpperCaseField extends JTextField {
 
     public UpperCaseField(int cols) {
         super(cols);
     }
 
     protected Document createDefaultModel() {
         return new UpperCaseDocument();
     }
 
     static class UpperCaseDocument extends PlainDocument {
 
         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);
         }
     }
 }
ViniGodoy

Nossa, era mais fácil só ter chamado toUpperCase:

  1. Crie a classe:

public class UpperCaseDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if (str == null) { return; } super.insertString(offs, str.toUpperCase(), a); } }

  1. Depois é só usar com:
seuTextField.setDocument(new UpperCaseDocument());

Mas é bom ler o artigo que indiquei para saber o que tá acontecendo. E também para aprender a segunda demanda comum de um JTextField: limitar o número de caracteres.

jonasjgs2

tguerra
crieia a classe informada por vc mas me da
um erro nesta linha

o erro e o seguinte:

super.insertString(offs, new String(upper), a);

no suitable method found for insertString(int,java.lang.String,javax.print.attribute.AttributeSet)

method javax.swing.text.PlainDocument.insertString(int,java.lang.String,javax.swing.text.AttributeSet) is not applicable

(actual argument javax.print.attribute.AttributeSet cannot be converted to javax.swing.text.AttributeSet by method invocation conversion)
ViniGodoy

Você importou a classe AttributeSet errada.

tguerra

jonasjgs2:
tguerra
crieia a classe informada por vc mas me da
um erro nesta linha

o erro e o seguinte:

super.insertString(offs, new String(upper), a);

no suitable method found for insertString(int,java.lang.String,javax.print.attribute.AttributeSet)

method javax.swing.text.PlainDocument.insertString(int,java.lang.String,javax.swing.text.AttributeSet) is not applicable

(actual argument javax.print.attribute.AttributeSet cannot be converted to javax.swing.text.AttributeSet by method invocation conversion)</blockquote>

Oi, jonasjgs2.

A classe que eu te passei foi referenciando a documentação do JTextField: http://download.oracle.com/javase/1.5.0/docs/api/javax/swing/JTextField.html, na parte referente a UpperCase, pra que você a partir da documentação, gerasse sua solução.

Mas o ViniGodoy simplificou tudo no post dele.

jonasjgs2

vinigodoy
parabens cara,
funcionou legal…

muito obrigado

A

ViniGodoy:
Nossa, era mais fácil só ter chamado toUpperCase:

  1. Crie a classe:

public class UpperCaseDocument extends PlainDocument { public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { if (str == null) { return; } super.insertString(offs, str.toUpperCase(), a); } }

  1. Depois é só usar com:
seuTextField.setDocument(new UpperCaseDocument());

Mas é bom ler o artigo que indiquei para saber o que tá acontecendo. E também para aprender a segunda demanda comum de um JTextField: limitar o número de caracteres.

Vlw!!! Muito bom mesmo, funcionou legal. Só tenho mais um probleminha. Como consigo limitar a quantidade de caracteres?

E

Para limitar a quantidade de caracteres, veja o que o Vinicius lhe falou há 2 posts atrás:

E o artigo que ele lhe indicou, caso você tenha se esquecido, é: http://www.guj.com.br/articles/29

Criado 3 de novembro de 2011
Ultima resposta 27 de out. de 2012
Respostas 9
Participantes 5