Galera tentei sozinho e tentei e tentei mas eu não consigo capturar quando a tecla ‘Ç’ é apertada¬¬ Eu uso InputMap e ActionMap, não trato os eventos com KeyListeners.
Com as outras letras do alfabeto e números não tenho problema( pelo menos não ainda ). Tenho apenas com o CEDILHA.
Meu método processaTeclas() está assim:
private void processaTeclas() {
botoesA = visaoPrincipal.getBotoesA();
/** * Captura o InputMap sempre que a janela atual está em foco e captura o ActionMap */
InputMap iMap = visaoPrincipal.getPainelPrincipal().getInputMap( JComponent.WHEN_IN_FOCUSED_WINDOW );
ActionMap aMap = visaoPrincipal.getPainelPrincipal().getActionMap();
/** * Associa as ações aos objetos da classe Interna e associa as teclas aos Actions Maps para botões numéricos*/
for( int i = 0; i < 10; i++ ) {
String actionName = "botaoN" + i;
aMap.put( actionName, acaoBotoesNumericos[i] = new BotaoNumericoAcao(i) );
iMap.put( KeyStroke.getKeyStroke("" + i), actionName );
iMap.put( KeyStroke.getKeyStroke("NUMPAD" + i), actionName );
}
/** * Associa as ações aos objetos da classe Interna e associa as teclas aos Actions Maps para botões de texto( alfabeto ) */
for( int i = 0; i < 27; i++ ) {
String actionName = "botaoA" + i;
String letra = botoesA[i].getText();
aMap.put( actionName, acaoBotoesAlfabeto[i] = new BotaoAlfabetoAcao(i) );
iMap.put( KeyStroke.getKeyStroke(letra), actionName );
}
}
E minha classe BotaoAlfabetoAcao está assim:
/**
* Classe interna responsável por capturar as teclas de texto( alfabeto ) e passar para a camada Model - Dados
*/
private class BotaoAlfabetoAcao extends AbstractAction {
int n;
public BotaoAlfabetoAcao( int n ) {
this.n = n;
}
@Override
public void actionPerformed( ActionEvent e ) {
dados.setAreaDeTexto(n);
}
}
Ai voce me pergunta, ué mas por que voce passa um número para o construtor de BotaoAlfabetoAcao e ele passa um numero para a areaDeTexto? Porque eu estou tentando fazer esse programa em MVC com swing, então botei as coisas separadas, Essa classe é a controller, e na dados, ele sabe o que notificar a visão de acordo com o que ele recebe. No caso como estou recebendo um INTEIRO, ele vai pegar esse inteiro na Model - Dados, que é o inteiro representando o número do elemento do botão no array. La na model, eu tenho um array com os botoes do alfabeto. E no caso se eu passar o valor 1() ele vai chamar o construtor sobrecarregado vai pegar o valor 1 e corresponder ao botao[1] = que é a letra B e vai exibir na tela, entendeu? Funciona com todos, menos com o CEDILHA.
EDIT: Só para constar, além do : “DEAD_CEDILLA”, já tentei “Ç” e ‘Ç’ e também não dá

