[RESOLVIDO]Como capturar o 'getSource' dentro de um JDesktopPane

Boa tarde,

fiz este exemplo de acordo com uma solução do VinyGodoy (excelente por sinal) e que funciona. Porém, dentro do JFrame tenho um JDesktopPane que possui vários JPanels com botões e etc. O problema é que toda vez que ‘actionPerformed’ é executado o resultado trazido pelo ‘getSource’ é o próprio JDesktopPane. Ocorre que dessa forma, não consigo saber qual botão foi pressionado para direcionar a execução do fluxo. Segue abaixo um trecho:

public class JFramePrincipal extends javax.swing.JFrame {
  
  private class TecladoAction extends AbstractAction {
    @Override
    public void actionPerformed(ActionEvent e) {
      // o resultado trazido pelo 'getSource' é o próprio JDesktopPane
    }
  }
  
  private TecladoAction tecla_F12 = new TecladoAction();
  private TecladoAction tecla_F11 = new TecladoAction();
  
  private void registrarAcoesDoTeclado(JDesktopPane painel) {
    ActionMap actionMap = painel.getActionMap();
    actionMap.put("btnDlgRoot", tecla_F12);
    actionMap.put("btnConfigCabinete", tecla_F11);
    
    painel.setActionMap(actionMap);
    InputMap imap = painel.getInputMap(JDesktopPane.WHEN_IN_FOCUSED_WINDOW); 
    imap.put(KeyStroke.getKeyStroke("F12"), "btnDlgRoot");
    imap.put(KeyStroke.getKeyStroke("F11"), "btnConfigCabinete");
  }
  
  private JDesktopPane desktop;
  private JFileChooser openDialog;
  private Processo processo;
  private Colaborador colaborador;

  public JFramePrincipal() {
    initComponents();
    
    desktop = new JDesktopPane(); // Sempre traz este componente no getSource do actionPerformed <-----
    
    setContentPane(desktop);
    desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE); // Make dragging a little faster but perhaps uglier. 
    desktop.setBackground(new Color(240, 240, 240));
    
    // Componentes visuais são adicionados ao JDesktopPane
    adicionaComponentes();    
    registrarAcoesDoTeclado(desktop);

Alguém pode ajudar?

leorbarbosa me explica como é esse negócio ai.
Não entendi vc quer utilizar o evento no teclado ou nos botões?

Não vejo vc adicionando o evento aos botões ai no código.

Se possível mostra o código todo.

Gostaria de adicionar alguns atalhos de teclado, por exemplo:
F1 - ajuda
F2 - salvar
F3 - abrir, etc

leorbarbosa para utilizar evento com o teclado vc pode add ao Jframe o evento de teclado.

[code]addKeyListener(new KeyListener() {

		@Override
		public void keyTyped(KeyEvent arg0) {			
		}
		
		@Override
		public void keyReleased(KeyEvent arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void keyPressed(KeyEvent arg0) {
			// TODO Auto-generated method stub
			
		}
	});[/code]

Claro, vc terá de controlar o foco, para isso vc pode desativar o foco dos botões.

Agradeço a atenção, mas esta solução torna-se inviável se tiver que escrever listeners para cada componente…

Alguém que tenha implementado esta solução do VinyGodoy pode ajudar?

Ficou assim:

public class JFramePrincipal extends javax.swing.JFrame {
  
  // Para as teclas de atalho
  public enum TeclasDeFuncao {F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12}  
  
  public class TecladoAction extends AbstractAction {
    
    private TeclasDeFuncao teclaDeFuncao;
    public TecladoAction(TeclasDeFuncao teclaDeFuncao) {
      this.teclaDeFuncao = teclaDeFuncao;
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
      switch (teclaDeFuncao) {
        case F12:
          btnDlgRootActionPerformed(e);
          break;
          
        case F11:
          btnConfigCabineteActionPerformed(e);
      }
    }
  }
  
  private TecladoAction tecla_F12 = new TecladoAction(TeclasDeFuncao.F12);
  private TecladoAction tecla_F11 = new TecladoAction(TeclasDeFuncao.F11);

  public void registrarAcoesDoTeclado(JDesktopPane painel) {
    ActionMap actionMap = painel.getActionMap();
    actionMap.put("btnDlgRoot", tecla_F12);
    actionMap.put("btnConfigCabinete", tecla_F11);

    painel.setActionMap(actionMap);
    InputMap imap = painel.getInputMap(JDesktopPane.WHEN_IN_FOCUSED_WINDOW); 
    imap.put(KeyStroke.getKeyStroke("F12"), "btnDlgRoot");
    imap.put(KeyStroke.getKeyStroke("F11"), "btnConfigCabinete");
  }