UpperCase em JTextField - solução genérica

Após procurar pela net uma solução para permitir ao usuário inserir apenas letras em maiusculas em JTextFiled (e outros componentes mais), juntei tudo que encontrei e elaborei a solução abaixo:

 private void tf_NomeKeyReleased(java.awt.event.KeyEvent evt) {                                    
        JTextField tf = (JTextField) evt.getComponent();
        if (evt.getKeyCode()!=32 & evt.getKeyCode()!=8 & evt.getKeyCode()!=37 & evt.getKeyCode()!=39)
            tf.setText(tf.getText().toUpperCase());
    } 

Basta copiar as três últimas linhas do código e cologar no envento KeyReleased do componente.
Não precisa alterar nada, caso o componente seja um JTextField. Se por exemplo for um JTextPane, mude o tipo do objeto na segunda linha.

Cordialmente;

Claudir Pereira dos Santos

Oi,

Eu utilizaria mascaramento no campo para fazer isso. Nem sempre queremos uma escuta de teclado em nossas aplicações.

Porém, utilizar a tabela ASCII sempre é interessante…

Tchauzin!

Eu tentei usar o mascaramento, mas tive problemas com a tecla de espaço pois ao colocar no campo o mascaramento para letras maiusculas ele não aceitava o espaço.

Cordialmente;

Claudir

E o que você me diz dele recortar um texto com minúsculas e colar no seu JTextField?

Além da solução da Lina, o correto é sobrescrever a interface document.

Copie essa classe para seu projeto:

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

Depois é só fazer:

Para um JTextPane, talvez você tenha que fazer algo similar, mas sobrescrevendo a classe HTMLDocument.

[quote=ViniGodoy]Além da solução da Lina, o correto é sobrescrever a interface document.

Copie essa classe para seu projeto:

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

Depois é só fazer:

Para um JTextPane, talvez você tenha que fazer algo similar, mas sobrescrevendo a classe HTMLDocument.[/quote]

Oi,

Simplesmente perfeito =)

Tchauzin!

te juro vini quando conheci esse metodo chorei de emocao pensei q nao era possivel, modifiquei ela pra aceitar apenas letras e numeros, nada de caracteres

[quote]ViniGodoy wrote:
Além da solução da Lina, o correto é sobrescrever a interface document.

Copie essa classe para seu projeto:
view plaincopy to clipboardprint?

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

Depois é só fazer:
view plaincopy to clipboardprint?
seuTextField.setDocument(new UpperCaseDocument());
seuTextField.setDocument(new UpperCaseDocument());

Para um JTextPane, talvez você tenha que fazer algo similar, mas sobrescrevendo a classe HTMLDocument.

Oi,

Simplesmente perfeito =)

Tchauzin![/quote]

Concordo plenamente com a Lina.

Abraço!

Oi,

Isso é pq você não olhou pelos olhos da band. rs (tá foi palha).

O que eu quis dizer é que aqui no guj existem ótimos tutoriais, inclusive esse:

http://www.guj.com.br/article.show.logic?id=29

Ajudando a controlar digitos e valores em um JTextField =)

Tchauzin!

O exemplo do ViniGodoy é perfeito para ilustrar que entender como o MVC é aplicado ao Swing é fundamental. Evita muitas gambiarras… :lol:

Sim, aqui eu já havia postado outros dois documents “mais populares”:
http://www.guj.com.br/posts/list/107425.java#579803

Como tamanho fixo num JTextField (discaramente copiado do tuto que a Lina passou) e um que só aceita números, também com tamanho fixo.

Oi,

Isso é pq você não olhou pelos olhos da band. rs (tá foi palha).

O que eu quis dizer é que aqui no guj existem ótimos tutoriais, inclusive esse:

http://www.guj.com.br/article.show.logic?id=29

Ajudando a controlar digitos e valores em um JTextField =)

Tchauzin![/quote]

Nao voce nao entendeu, ja conhecia essa classe a muito tempo, digo a primeira vez que vi ja ta fazendo um tempinho acho q foi ate o vini que postou nao me lembro realmente muito boa e da pra ter uma nocao do que o java e capaz… vlw