Tecla se propaga para proximo jdialog [resolvido]

1 resposta
aguiarle

bom dia,
estou com um problema.
estou utilizado

JRootPane meurootpane = getRootPane();  
        meurootpane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F7,0), "F7");    
        meurootpane.getRootPane().getActionMap().put("F7", new AbstractAction("F7") {    
          public void actionPerformed(ActionEvent e) {  
            aceitaVenda();  
          }  
        });

qnd eu aperto f7 ele abre outro formulario para edicao. Neste outro formulario existe tbm a tecla f7 para finalizar a venda.

qnd aperto f7 no primeiro formulario, ele se propaga para o segundo e executando o aceita venda e o finaliza venda.
gostaria q ele nao executasse o finaliza venda no segundo formulario.
Agradeco desde ja qualquer ajuda.

1 Resposta

aguiarle

Crie uma classe

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.AbstractAction;
import javax.swing.JComponent;
import javax.swing.JRootPane;
import javax.swing.KeyStroke;
import javax.swing.Timer;

/**
 *
 * @author Alex
 */
public abstract class Tecladeatalho {
  Tecladeatalho(final JRootPane rootpanel, final String tecla, final int codigotecla, 
          final int tempoespera){
  
    Timer esperaTimer = new Timer(tempoespera, new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        rootpanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(codigotecla, 0), tecla);
        rootpanel.getRootPane().getActionMap().put(tecla, new AbstractAction(tecla) {

          public void actionPerformed(ActionEvent e) {
            acao();
          }
          
        });
      }
    });
    esperaTimer.setRepeats(false);
    esperaTimer.restart();
    
  }
  public abstract void acao();
  
}

e utilizei no construtor do formulario

new Tecladeatalho(getRootPane(),"F11",KeyEvent.VK_F11,2000) {
      @Override
      public void acao() {
        aceitavenda();
      }
    };
Criado 13 de maio de 2008
Ultima resposta 29 de mai. de 2008
Respostas 1
Participantes 1