Precedencia em KeyListener do JPanel e do JTextField!

4 respostas
rdantas

Boa noite pessoal,

Tenho um JInternalFrame que eu fecho quando o cara tecla 'ESC'. Bom, coloquei este comando no evento KeyListener do JPanel. Meu problema é que se eu abrir o internalframe e clicar em algum JTextField, o evento KeyReleased do JPanel não é mais chamado e sim o do JTextField. Eu gostaria que fosse disparado o evento tanto para o JTextField quanto para o JPanel.

Alguem conhece alguma forma de forçar a execução do evento dos dois componentes?

Grato pela atenção,

Rodrigo.

4 Respostas

ViniGodoy

Registre isso no seu rootPane:

JRootPane rootPane = this.getRootPane(); KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); rootPane.registerKeyboardAction(actionListener, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);

Onde actionListener refere-se ao actionlistener que fecha a sua janela.

Entretanto, eu desaconselho que você faça isso. Já usei isso num sistema as dores de cabeça não compensam. O recurso não traz nenhuma vantagem real ao usuário. Se um dos seus processos demorar e o usuário pressionar ESC para cancelar o processamento, ele terá o inconveniente de esperar o processamento terminar e a janela fechar logo depois que o que ele queria fica pronto. E isso para ele é BASTANTE frustrante.

rdantas

valew Vini, vou testar. Ontem acidentalmente eu encontrei o ctrl+F4 que fechou blz a tela. Mas de qq forma eu pretendo usar apenas em rotinas de cadastro.
Obrigadão.

ViniGodoy

Na verdade, o Java é consistente com o comportamento do sistema operacional. No linux, fechar com ESC é possível. No Windows, a tecla para isso é CTRL+F4 (janela) ou ALT+F4 (aplicação).

rdantas

Sim, mas ainda não testei o comportamento da aplicação no Windows. É que eu só uso Linux, até tenho uma partição Win, mas só uso pra fazer testes já que meus clientes só usam Windows. É que como eu estou usando JInternalFrame, quando eu uso ALT+F4 eu fecho a aplicação toda, enquanto meu objetivo é fechar apenas uma rotina em particular. De qq forma, vou fazer os testes hoje a tarde e posto aqui os resultados.

Obrigado pela atenção,
Rodrigo.

Criado 26 de março de 2008
Ultima resposta 27 de mar. de 2008
Respostas 4
Participantes 2