(resolvido) Aceitar apenas letras maiusculas no JtextField

alguem pode me ajudar

por favor?

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

Oi, jonasjgs2.

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

[quote]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.

[code]
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);
     }
 }

}[/code][/quote]

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.

1 curtida

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)

Você importou a classe AttributeSet errada.

[quote=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)[/quote]

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.

vinigodoy
parabens cara,
funcionou legal…

muito obrigado

[quote=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.[/quote]

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

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