Problema para adicionar tecla de atalho em um JPanel

3 respostas
jason_bourne

Pessoal,

Estou tentando adicionar uma tecla de atalho em um JPanel que foi adicionado em outro JPanel. O problema é que se eu uso o this para tentar colocar getActionMap().put e getInputMap().put ele simplesmente não funciona. Agora se eu fizer o mesmo com o JPanel principal, ele funciona. Pq isso?

.
.
.
//esse código adiciona o JPanel ControleEstoque
estoque = new ControleEstoque(org.jdesktop.application.Application.getInstance(), CommerceSysEdView.this);
estoque.setSize(new Dimension(800, 500));
mainPanel.removeAll();
mainPanel.updateUI();
mainPanel.add(estoque);

estoque.setVisible(true);
estoque.transferFocus();
estoque.revalidate();
.
.
.
//esse é o JPanel que desejo adicionar a tecla de atalho
public class ControleEstoque extends javax.swing.JPanel {

    public ControleEstoque() {
        initComponents();
    }

    public ControleEstoque(Application instance, CommerceSysEdView aThis) {
        initComponents();

        this.getActionMap().put("inserirEstoque", inserirEstoque);
        this.getInputMap().put(KeyStroke.getKeyStroke("F2"), "inserirEstoque");


    }
.
.
.
    javax.swing.Action inserirEstoque = new javax.swing.AbstractAction() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("ok:"+new Date());
        }
    };
.
.
.

3 Respostas

ViniGodoy

Você quer que a tecla valha para a tela toda?

Se for, pegue o seu ActionMap assim:

Mais informações:
http://www.guj.com.br/java/47289-actionlistener-x-keylistener#258583

jason_bourne

ViniGodoy:
Você quer que a tecla valha para a tela toda?

Se for, pegue o seu ActionMap assim:

Mais informações:
http://www.guj.com.br/java/47289-actionlistener-x-keylistener#258583

Então, o problema é q é um JPanel dentro de outro JPanel. E não funciona quando é assim. Pelo menos aparentemente

jason_bourne

ViniGodoy, obrigado pela ajuda. Acabei conseguindo assim:

javax.swing.Action inserirEstoque = new javax.swing.AbstractAction() {

        public void actionPerformed(ActionEvent e) {
            System.out.println("ok:" + new Date());
        }
    };

        mainPanel.getActionMap().put("inserirEstoque", inserirEstoque);
        mainPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F2"), "inserirEstoque");
.
.
.
   @Action
    public Task controleEstoque() {
        return new ControleEstoqueTask(org.jdesktop.application.Application.getInstance());
    }

    private class ControleEstoqueTask extends Task {

        ControleEstoqueTask(org.jdesktop.application.Application app) {
            super(app);
        }

        @SuppressWarnings("unchecked")
        @Override
        protected Void doInBackground() {

            setMessage("Iniciando estoque...");

            ControleEstoque estoque = new ControleEstoque(org.jdesktop.application.Application.getInstance());

            setMessage("Controle de Estoque");

            estoque.setSize(new Dimension(800, 500));
            mainPanel.removeAll();
            mainPanel.updateUI();
            mainPanel.add(estoque);
            mainPanel.setEnabled(true);

            return null;
        }
    }
Criado 20 de fevereiro de 2011
Ultima resposta 22 de fev. de 2011
Respostas 3
Participantes 2