Juro que pesquisei hoje o dia todo na net e, como usuário iniciante de Java (to migrando do VB por causa do trabalho, mas não sou profissional do ramo) estou encontrando algumas dificuldades qye devem ser café pequeno para os mais experientes que a seguinte:
Numa das telas do meu projeto inseri uma caixa de combinação que, a princípio, será editável, para que o usuário digite determinada informação (nome da empresa) caso a mesma não esteja na lista, que será recuperada de um banco de dados. Gostaria de restringir a digitação a apenas caracteres maiúsculos ou convertê-los para tal quando o objeto perder o foco.
Qual a melhor forma para fazer isso? (pesquisei e cheguei perto com toUpperCase mas não consegui implementar corretamente).
Esqueci de dizer que se você quiser ir convertendo enquanto o usuário digita de uma pesquisada sobre o KeyListener…
Att…
davidbuzatto
Olá
A solução não é muito simples, mas o código abaixo faz o que vc precisa.
Na verdade vc vai precisar criar um novo Document para seu componente que implemente essa regra.
No código abaixo, criei um novo JTextField (UpperCaseField) que já faz a implementação do document.
/** * * @author David Buzatto */publicclassUpperCaseFieldextendsJTextField{protectedDocumentcreateDefaultModel(){returnnewUpperCaseDocument();}staticclassUpperCaseDocumentextendsPlainDocument{publicvoidinsertString(intoffs,Stringstr,AttributeSeta)throwsBadLocationException{if(str==null){return;}char[]upper=str.toCharArray();for(inti=0;i<upper.length;i++){upper[i]=Character.toUpperCase(upper[i]);}super.insertString(offs,newString(upper),a);}}}
Para instanciar seu JTextField vc faria:
JTextField campo = new UpperCaseField();
Caso vc esteja utilizando o NetBeans, selecione seu campo, e na aba de propriedades, escola a aba code.
Lá vá no custom creation code e insira new UpperCaseField();
Até mais!
Felipe.JavaMan
Cara, deve ter outras formas mais elegantes para fazer isso + vou tentar te ajudar com a que eu sei, veja bem:
se o campo que você estiver usando for um jTextField e você quiser somente a digitação de letras maiúsculas, você pode pegar a letra no momento em que ela é digitada através do evento KeyListener e efetuar a conversão caso ela seja minúscula, veja o exemplo abaixo:
// Declaração JTextFieldjTextField=newjavax.swing.JTextField();Stringminuscula;Stringmaiuscula;// Aqui o evento é capturado e chama o método jTextFieldConverterMaiuscula passando como parâmetro o eventojTextField.addKeyListener(newjava.awt.event.KeyAdapter(){publicvoidconverterMaiuscula(java.awt.event.KeyEventevt){jTextFieldConverterMaiuscula(evt);}});// Nesse método ele efetua a conversão da string digitada p/ maiusculoprivatevoidjTextFieldConverterMaiuscula(java.awt.event.KeyEventevt){minuscula=jTextField1.getText();maiuscula=minuscula.toUpperCase();jTextField.setText(maiuscula);}
Como eu ja disse, deve existir formas melhores de se fazer isso. Espero ter ajudado.
C
Cl_dio_Rocha
Ainda não implementei nenhuma das dicas postadas. Só passei para agradecer à galera pela ajuda.
Abraços e muito obrigado.
C
Cl_dio_Rocha
Como postei anteriormente, trata-se de uma CAIXA DE COMBINAÇÃO. Ainda assim implementei a sugestão do David substituindo o extends JTextField por JComboBox e não funcionou.
David,
Poderia me ajudar?
Obrigado.
C
Cl_dio_Rocha
Substitui o JComboBox pela JTextField, implementei a dica passada pelo Davi e ainda assim não funcionou…
davidbuzatto
Cláudio,
Vc deve criar uma classe nova no seu projeto, com o nome de UpperCaseField e então dentro dela colar o código que passei.
Na sua interface gráfica, coloque um JTextField, clique nele e no painel de proprieades, veja que acima existem outros painéis, dentre eles o painel código (code). Clique nele e vc verá que existem várias opções. Vá na “custom creation code”, não sei como está traduzido no netbeans em portugues. Nessa “propriedade” coloque “new UpperCaseField();” (sem as aspas).
Vá no código da sua classe de interface gráfica e faça o import do pacote que tem a classe UpperCaseField ou execute o fix imports (corrigir importações).
Compile e teste.
[]'s
C
Cl_dio_Rocha
Davi,
Fiz exatamente o que vc descreveu, inclusive substituindo a caixa de combinação pelo JTextField. O NetBeans está traduzido e coloquei a classe em “Criação de Código Personalizado”. Vou refazer os passos. valeu.
C
Cl_dio_Rocha
Davi,
Quando transferi o código que vc postou na linha abaixo apareceu a sugestão “Converter…a para AttributeSet”
super.insertString(offs,new String(upper),a);
C
Cl_dio_Rocha
Também executei o corrigir importações e ela não insiriu o respectivo pacote.
Poderia me ajudar por favor.
Obrigado.
davidbuzatto
Vou postar o projeto com isso pronto…
davidbuzatto
Ta ai.
Eu nunca fiz o mesmo com os JComboBox, mas o caminho é mais ou menos esse.
Até mais!
C
Cl_dio_Rocha
Davi,
Muito obrigado.
Para JTextField funcionou perfeitamente. Vou tentar mais tarde para JComboBox.
Mais uma vez muito obrigado.
davidbuzatto
Disponha
[]´s
discorpio
Boa tarde a todos.
Esta é mais uma forma das formas melhores, ou seja, simplificar o código, assim:
// Nesse método ele efetua a conversão da string digitada p/ maiusculoprivatevoidjTextFieldConverterMaiuscula(java.awt.event.KeyEventevt){jTextField.setText(jTextField1.getText().toUpperCase());}
Repare que nem precisou criar as variáveis maiscula e minuscula.