Amigos, já vi muitos tópicos antes de solicitar ajuda mas nao consigo mesmo.
Preciso forçar o usuario a digitar sempre em maiúsculo e também preciso fazer o ENTER mudar o foco para o campo anterior, assim como é feito pelo TAB.
Sou iniciante e nem nos tópicos eu consegui. Alguém tem um tutorial explicando isso detalhado?
// Colocando enter para pular de campo
HashSet conj = new HashSet(this.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS));
conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0));
this.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, conj);
É muito mais fácil do que ficar adicionando listener em campo por campo.
ViniGodoy é possivel colocar mais de um tratamento desta maneira que você citou, por exemplo colocar o enter para ir para o próximo e o esc para ir para o componente anterior?
E
ELIAS_COUTINHO
ViniGodoy meu caro…
Ficou quase perfeito. rsrs
Mas 180% melhor que antes.
A 'unica imprefeicao 'e que ele tambem perde o foco quando pressionamos ENTER em um botao. Se ele quando estiver com o foco no botao e eu pressionar ENTER executasse o comando do botao seria demais da conta!
Quanto ao gpviany acho que seria mais interessante pressionar seta para cima se desejarmos que o cursor volte ao foco anterior, ficaria mais padrao, acho que o ESC tem mais cara de aborto rsrsr…Calma, abortar uma operacao.
W
waldson
Pra voce deixar so maiusculas usa um JFormattedTextField:
try{
MaskFormatterm=newMaskFormatter("???????????????????");//Cada interrogação representa um caracterm.setValidCharacters("ABCDEFGHIJKLMNOPQRSTUVXZ ");//define os caracteres válidos(Não esquece do espaço).m.install(jFormattedTextField1);//instala -se no jFormattedtextField}catch(ParseExceptionex){
}
Ou então adiciona um keyListener(KeyReleased):
jTextField1.addKeyListener(newKeyAdapter(){publicvoidkeyReleased(KeyEvente){Stringa=jTextField1.getText();if(a.length()>=10)//Transfere o foco com 10 caracteres.jTextField1.transferFocus();a=a.toUpperCase();//transforma tudo em maiusculajTextField1.setText(a);//devolve para o jtextField}});
ps.: è melhor a segunda forma em relação a primeira pois a segunda converte para maiscula e a primeira so aceita maiuscula o que pode ser um incomodo caso a pessoa não saiba que tem q estar com o CAPS LOCK ativado.
acho que é isso espero ter ajudado.
flw
[]'s
peerless
Sim, é possível:
Como você pode ter notado, o setFocusTraversalKeys recebe como parâmetro uma index e um set de mapeamento. Se há uma index (KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS) é pq pode ser indexado várias outras estratégias.
No seu caso, ficaria algo como (além daquilo que você já colocou)
HashSet conj2 = new HashSet(this.getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS));
conj2.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ESCAPE, 0));
this.setFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, conj2);
Note a diferença: FORWARD_TRAVERSAL_KEYS e BACKWARD_TRAVERSAL_KEYS (vai e vem)
Pq set? Pq vc pode adicionar mais de uma tecla para determinada ação ser executada.
Entendeu!?
[]s
MrDataFlex
ELIAS COUTINHO:
ViniGodoy meu caro…
Ficou quase perfeito. rsrs
Mas 180% melhor que antes.
A 'unica imprefeicao 'e que ele tambem perde o foco quando pressionamos ENTER em um botao. Se ele quando estiver com o foco no botao e eu pressionar ENTER executasse o comando do botao seria demais da conta!
Quanto ao gpviany acho que seria mais interessante pressionar seta para cima se desejarmos que o cursor volte ao foco anterior, ficaria mais padrao, acho que o ESC tem mais cara de aborto rsrsr…Calma, abortar uma operacao.
Também gostaria de saber!!! Da para ele descobrir, qnd esta sobre o botão, ao invés de pular, executa??
Abraços!
ViniGodoy
O setFocusTransversalKeys é para um container. Se eu não me engano, é possível por seus botões em outro painel e definir nesse painel a troca de foco com tab.
O enter voltará a funcionar como sempre funcionou.
peerless
ViniGodoy:
O setFocusTransversalKeys é para um container. Se eu não me engano, é possível por seus botões em outro painel e definir nesse painel a troca de foco com tab.
O enter voltará a funcionar como sempre funcionou.
Isso é verdade, porém, se não me engano, ele aplica para todos os containers que fazem parte do container. Ai, já não sei se ficaria bem funcional, hehe
J
joellazzari
o código funciona perfeitamente, porém ainda não consegui resolver esse problema no botão.
Preciso fazer um sistema que só aceite maiusculas e que o enter funcione como o tab - porém, NÃO no botão. No botão ele deveria executar o evento respectivo.
Alguém conseguiu implantar esse código, excluindo os botões?