[RESOLVIDO]Capturar evento 'Ç' ou 'ç' foi apertado

Debugando o KeyStroke, os caminhos que cada sobrecarga de getKeyStroke toma é muito diferente…

Recomendo trocar de String para char e retestar.

O próprio JavaDoc demonstra que há alguma diferença:
http://docs.oracle.com/javase/6/docs/api/javax/swing/KeyStroke.html#getKeyStroke(java.lang.String)

http://docs.oracle.com/javase/6/docs/api/javax/swing/KeyStroke.html#getKeyStroke(char)

Achei!!!

inputMap.put(KeyStroke.getKeyStroke(“typed Ç”), meuCedilha);

Para o caso do Ç, precisa colocar o typed antes (não está escrito em lugar nenhum essa obrigatoriedade)

Seguinte,

Peguei teu código e dei uma olhada nele.

Há alguns pequenos erros nele e alguns ajustes:
Primeiro o for para criar os Action/InputMaps
Vc tem um array de 27 objetos (de zero a 26) mas para antes do último (que é justamente o cedilha).
Troquei por <=
for( int i = 0; i <= 26; i++ )

Depois, fiz as alterações:
InputMap iMap = visaoPrincipal.getPainelPrincipal().getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW );
Eu troquei por
InputMap iMap = visaoPrincipal.getPainelPrincipal().getInputMap();

Depois troquei o conteúdo do for por:

String actionName = "botaoA" + i; String letra = botoesA[i].getText(); aMap.put( actionName, acaoBotoesAlfabeto[i] = new BotaoAlfabetoAcao(i) ); iMap.put( KeyStroke.getKeyStroke(letra.toLowerCase().charAt(0)), actionName ); //Para pegar letras em minúsculo iMap.put( KeyStroke.getKeyStroke(letra.toUpperCase().charAt(0)), actionName ); //Para pegar letras em maiúsculo

Por fim, na classe Dados, alterei o método:

/** * Configura/Notifica a área de texto da Visão para texto( alfabeto ) */ public void setAreaDeTexto( int e ) { String letra = botoesA[e].getText(); visaoPrincipal.getAreaDeTexto().setText( visaoPrincipal.getAreaDeTexto().getText() + letra ); }

A sim… após esses ajustes, funcionou!

com relação ao método setAreaDeTexto
Tinha um if e == 26 que colocava o Ç. Provavelmente você já tinha alterado o código :wink:

O problema é que o Ç não é algo padrão (como a Lina tinha comentado).

Quando vc usa String no getKeyStroke, ele já entende a letra maiúscula e minúscula porém ele espera caracteres mapeados (VK_algumacoisa), quando usa char, precisa mapear ambos os casos…

Não diria, neste caso que era erro, mas “particularidades” não bem documentadas :wink:

[quote=lucas_guj]Hmm…Entendi. Caraca essa foi difícil. Só mas uma coisa, você percebeu, quando abriu o programa ai, que no visual editor o layout dele aparece de um jeito e, quando executa, fica de outro jeito? Eu usei layout em tudo, não sei por que ficou assim. Você tem alguma ideia?[/quote]Desculpe cara, mas não usei Visual Editor não (eu dificilmente uso um editor de telas). Mas o correto mesmo é utilizar layout managers sim.
Só uma observação: O Visual Editor foi “descontinuado” e agora há outro plugin: Window Builder. Há algumas versões do Visual Editor muito “bugadas” :wink: .

Não desenvolvo muito telas, mas qdo preciso, prefiro fazer na mão mesmo. Raramente utilizo editores de telas e não gosto do código q o matisse gera.