Dúvidas com Foco de Componentes JFormattedTextField e Uso de Actions

0 respostas
samirrolemberg

Estou desenvolvendo uma aplicação que faz o uso de teclas de atalho para disparar métodos comuns aos JButtons que são exibidos na tela.

segue um breve esquema:

Aqui inicio minha action (o atributo acaoCancelar é visivel por todo o JFrame)

Action acaoCancelar = new AbstractAction() { private static final long serialVersionUID = 4026410755881130618L; @Override public void actionPerformed(ActionEvent arg0) { cancelar(); } };
Em um outro momento defino a acão a uma tecla do teclado:

getActionMap().put("acaoCancelar", acaoCancelar); getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "acaoCancelar");

e tudo vinha funcionando muito bem. Para todos os botões.

entretanto, quando vou iniciar um cadastro nesta tela eu limpo os componentes da tela, redefino tabelas, botões de escolhas, e seto o foco (que estava em uma aba JPanel que continha isso tudo) no primeiro componente um JFormattedTextField com essas propriedades:

private JFormattedTextField getTxtCnpj() { if (txtCnpj == null) { try { txtCnpj = new JFormattedTextField(new MaskFormatter("##############")); txtCnpj.setText(""); txtCnpj.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent fe) { vefiricaCPF_CNPJ(); } }); txtCnpj.setFocusLostBehavior(JFormattedTextField.COMMIT); txtCnpj.setBounds(100, 19, 97, 20); txtCnpj.setColumns(10); } catch (ParseException e) { e.printStackTrace(); } } return txtCnpj; }

Então quando estava testando o comportamento dos botões - que entram em Enabled true ou false dependendo do estado da tela - o botão relacionado ao Escape da Action definida necessita que seja pressionado Duas vezes para ser registrado (diferente do comportamento inicial dele) e ao contrario de quando eu defino um mnemônico para ele (alt+c) que também dispara imediatamente.

Achei que fosse um problema com o ouvinte de (lostFocus) que uso nele, mas testei o foco inicial em um JTextField que também tem um lostFocus e não obtive o problema.

Posso estar enganado mas creio que o problema seja isso aqui:

txtCnpj.setFocusLostBehavior(JFormattedTextField.COMMIT);

entretanto necessito deste camarada e não posso descarta-lo.

Alguém já passou por este problema? ou me sugere uma alternativa para isso?

Criado 19 de julho de 2012
Respostas 0
Participantes 1