Tecla de atalho + JInternalFrame

7 respostas
alves.Felipe

Fala pessoal,
ja estou perdendo os cabelos com isso :D, mas vamos lá…
eu tenho uma tela genérica que é um JInternalFrame, e nesta classe eu configuro algumas teclas de atalho…
ai rodando o sistema, qdo eu abro a tela funciona normal as teclas, porém se eu clico em algum lugar da tela para de
funcionar todos os atalhos.
Provavelmente é alguma coisa de foco…mas ainda não consegui fazer funcionar…
segue a parte que eu crio a tela e onde eu configuro os atalhos:

tProduto = new FormProduto("Consulta de Produto", this);
 desktopPane.moveToFront(tProduto);
// ========= ok =========
        this.getActionMap().put(Constantes.BT_OK.toString(), new AbstractAction()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
               // System.out.println(Constantes.BT_OK.toString());                
                btOkAction(e);
            }
        });
        this.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), Constantes.BT_OK.toString());
        //this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F10, 0), Constantes.BT_OK.toString());
        
         // ========= Novo =========
        this.getActionMap().put(Constantes.BT_NOVO.toString(), new AbstractAction()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                //System.out.println(Constantes.BT_NOVO.toString());
                btNovoAction(e);
            }
        });
        this.getInputMap(JComponent.WHEN_FOCUSED).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0), Constantes.BT_NOVO.toString());
       // this.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0), Constantes.BT_NOVO.toString());
...//existem mais atalhos

se alguém puder dar uma ajuda, agradeço!

7 Respostas

alves.Felipe

alguém? alguma dica?

eliangela

Normalmente esse é o código usado para trocar o TAB pelo ENTER.

HashSet conj = new HashSet(frame.getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); conj.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_ENTER, 0)); frame.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, conj);

Não entendi muito bem o seu código, mas vc pode olhar e fazer alguma comparação.

Espero ter ajudado.

alves.Felipe

como que eu adapto no seu código para quando eu apertar o F10 chamar algum método?

eliangela

acho que no seu caso, vc vai ter que criar um evento específico pra isso.

Como vc pode ver, o KeyboardFocusManager é uma classe que extends uma classe que trabalha com eventos.

Como customizar essa parte, vou ficar te devendo.

Até mais

alves.Felipe

alguém tem alguma dica?

S

Olá amigo

tenta assim:

no lugar de MDIFrame coloque o seu desktop

JMenuBar root = MDIFrame.getInstance().getJMenuBar();
    for (int i = 0; i < root.getMenuCount(); i++) {
        JMenu menu = root.getMenu(i);

        if (i == 1) {
           for (int j = 0; j < menu.getItemCount(); j++){
              JMenuItem obj  = menu.getItem(j);
              if(obj != null) {
       /**
       *  Define os shortcuts dos items do menu cadastro e suas ações
       */

                  if (obj.getText().equals("Clientes")) {
                      obj.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0));
                      obj.addActionListener(new ActionListener() {

                          public void actionPerformed(ActionEvent e) {
   --->>> aqui coloque a  sua chamada 
                              
                          }
                      });
                  }

Silvio Guedes

alves.Felipe

valeo pelo retorno silviogs, mas na realidade o problema que estou tendo não
nos atalhos dos itens do menu, isso esta funcionando corretamente.
o problema é dpeois que eu abro uma tela, que tenho uns botões e alguns desses botões tem os atalhos. entende?
então qdo eu abro a tela, e não clico em nenhum lugar, os atalhos funcionam, mas depois de eu ja clicar na tela, em algum campo por exemplo,
os atalhos param de funcionar…

valeu por enquanto…

Criado 11 de julho de 2011
Ultima resposta 18 de jul. de 2011
Respostas 7
Participantes 3