Executar ação on key press, sem addKeyListener em cada componente

no delphi, qdo eu seto o onkeypress do Form, isso faz com q , nao importa qual componente esteja focado,
ele executa determinada ação
como eu faria isso em java?
sem setar add um keyListener em cada componente de um JFrame, ou JINternalFrame?

Normalmente em Swing não se usa um keyListener - como você viu, ele trata eventos de nível muito baixo, e não consegue tratar as teclas TAB e ENTER, que são tratadas antes de passar ao KeyListener.

Para teclas de função ou ESC (que devem funcionar não importando em que componente o foco está) use um “key binding”:

http://download.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

era exatamente isso q eu procurava, voce pode passar um exemplozin?
tipo, eu add isso

component.getInputMap().put(KeyStroke.getKeyStroke("SPACE"),
                            "pressed");
component.getInputMap().put(KeyStroke.getKeyStroke("released SPACE"),
                            "released");

onde exatamente? no JFrame?
esse componet, seria meu JFrame?

duas funcionalidades q eu fiz, se servir pra alguem

fecha o forumario ao pressionar ESC

Action doEscape = new AbstractAction() {
            public void actionPerformed(ActionEvent e)
            {
                close();
            }
        };
        
        this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
                            "doEscape");
        
        this.getActionMap().put("doEscape", doEscape);

trocar tab por enter
obs. eu usava o setFocusTraversalKeys, mas qdo pressionava ENTER em cima de um JButton, ele nao acionava o botao, somente pulava o campo
usando esse eskema ai fico legal paca

Action doEnterKeyPress = new AbstractAction() {
            public void actionPerformed(ActionEvent e)
            {
                KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner().transferFocus();
            }
        };
        
        this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("released ENTER"),
                            "doEnter");
        
        this.getActionMap().put("doEnter", doEnterKeyPress);

Opa, eai pessoal! Então, eu também to passando por umas dificuldades com KeyBindings… Eu segui os passos do amigo Shinoob, e consegui fazer KeyBinds, porém se eu utilizar outro componente qualquer, as keybinds vão para o espaço, já tentei “rechamar” o método, mas também não adiantou. Grato pela ajuda!

EDIT1: Consegui resolver, faltou eu botar “WHEN_IN_FOCUSED_WINDOW” Desculpem o transtorno…

EDIT2: Aproveitando o post para perguntar outra coisa que não consegui no Google nem na API… Como faço para que o “focus” caminhe sobre os botões? Exemplo: No Desktop do PC vc pode dar TAB e mover a seleção com as setas direcionais, tem como fazer isto na minha aplicação? Grato pela ajuda!

http://www.guj.com.br/java/92862-tecla-enter-no-jtextfield-#497384

Grato pela sua resposta Entanglement! Mas este link não é bem o que eu queria, eu queria fazer o meu programa navegável através das setas de navegação, pelo que intendi, o link que vc me passou apenas ensina a substituir o tab por outra tecla. Se alguém tiver alguma maneira de me ajudar eu agradeço.

Você viu o link exato? Ele diz:

[quote=entanglement]Você viu o link exato? Ele diz:…
[/quote]

Salve Entanglement! Então cara, eu vi sim, mas o problema em questão, é que eu nem sequer consigo navegar nos componentes do meu GUI, o método para fazer a ação sobre o “focus” não é o problema, o meu problema é a navegação mesmo… Grato a qualquer ajuda!

Edit: Desculpe Entanglement, não prestei atenção no código do link q vc me passou… Esta tudo lá. Grato pela sua ajuda!

shinoob, vc encontrou a solução para um problemão que eu tinha aqui faz tempo, valeu brow !