Amigos, estou tentando colocar o BACK_SPACE na minha calculadora só que essa ¨%%$$ não vai…
estou usando imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), "botaoApagar");
quando uso isso, ele não reconhece… alguem pode me da uma luz?
EDIT:
Pessoal, segue codigo completo:
[code]/*
- To change this license header, choose License Headers in Project Properties.
- To change this template file, choose Tools | Templates
- and open the template in the editor.
*/
package calculadora;
/**
*
-
@author DexBook
*/
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.InputMap;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
public class CalculadoraFrame extends JFrame {
private JPanel pnlPrincipal;
private JTextField txtVisor;
private JPanel pnlBotoes;
//Criação das ações dos botões.
private final BotaoNumericoAction acaoBotao1 = new BotaoNumericoAction(1);
private final BotaoNumericoAction acaoBotao2 = new BotaoNumericoAction(2);
private final BotaoNumericoAction acaoBotao3 = new BotaoNumericoAction(3);
private final BotaoNumericoAction acaoBotao4 = new BotaoNumericoAction(4);
private final BotaoNumericoAction acaoBotao5 = new BotaoNumericoAction(5);
private final BotaoNumericoAction acaoBotao6 = new BotaoNumericoAction(6);
private final BotaoNumericoAction acaoBotao7 = new BotaoNumericoAction(7);
private final BotaoNumericoAction acaoBotao8 = new BotaoNumericoAction(8);
private final BotaoNumericoAction acaoBotao9 = new BotaoNumericoAction(9);
private final BotaoNumericoAction acaoBotao0 = new BotaoNumericoAction(0);
private final BotaoOperacaoAction acaoBotaoApagar = new BotaoOperacaoAction("BACK_SPACE");
public CalculadoraFrame() {
super("Calculadora");
setContentPane(getPnlPrincipal());
setSize(200, 250);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private JPanel getPnlPrincipal() {
if (pnlPrincipal != null) {
return pnlPrincipal;
}
pnlPrincipal = new JPanel(new BorderLayout());
pnlPrincipal.add(getTxtVisor(), BorderLayout.NORTH);
pnlPrincipal.add(getPnlBotoes(), BorderLayout.CENTER);
registrarAcoesDoTeclado(pnlPrincipal);
return pnlPrincipal;
}
private JTextField getTxtVisor() {
if (txtVisor != null) {
return txtVisor;
}
txtVisor = new JTextField();
txtVisor.setEditable(false);
txtVisor.setHorizontalAlignment(JTextField.RIGHT);
return txtVisor;
}
private JPanel getPnlBotoes() {
if (pnlBotoes != null) {
return pnlBotoes;
}
pnlBotoes = new JPanel();
pnlBotoes.setLayout(new GridLayout(4, 4));
//Associamos os botões as suas respectivas ações.
//Isso só associará a ação ao clique do botão.
pnlBotoes.add(new JButton(acaoBotao7));
pnlBotoes.add(new JButton(acaoBotao8));
pnlBotoes.add(new JButton(acaoBotao9));
pnlBotoes.add(new JButton("/"));
pnlBotoes.add(new JButton(acaoBotao4));
pnlBotoes.add(new JButton(acaoBotao5));
pnlBotoes.add(new JButton(acaoBotao6));
pnlBotoes.add(new JButton("*"));
pnlBotoes.add(new JButton(acaoBotao1));
pnlBotoes.add(new JButton(acaoBotao2));
pnlBotoes.add(new JButton(acaoBotao3));
pnlBotoes.add(new JButton("-"));
pnlBotoes.add(new JButton(acaoBotao0));
pnlBotoes.add(new JButton("C"));
pnlBotoes.add(new JButton("="));
pnlBotoes.add(new JButton("+"));
return pnlBotoes;
}
//Ações para o botão numérico. Ela simplesmente concatena o número ao final
//do texto do visor.
private class BotaoNumericoAction extends AbstractAction {
private final int numero;
public BotaoNumericoAction(int numero) {
super(Integer.toString(numero));
this.numero = numero;
}
@Override
public void actionPerformed(ActionEvent e) {
getTxtVisor().setText(getTxtVisor().getText() + numero);
}
}
class BotaoOperacaoAction extends AbstractAction {
private String operacao;
public BotaoOperacaoAction(String operacao) {
super(operacao);
this.operacao = operacao;
}
@Override
public void actionPerformed(ActionEvent e) {
if (operacao.equals("BACK_SPACE")) {
getTxtVisor().setText(getTxtVisor().getText().substring(0, getTxtVisor().getText().length() - 1));
}
}
}
private void registrarAcoesDoTeclado(JPanel painel) {
//Damos um nome para cada ação. Esse nome é útil pois mais de
//uma tecla pode ser associada a cada ação, como veremos abaixo
ActionMap actionMap = painel.getActionMap();
actionMap.put("botao1", acaoBotao1);
actionMap.put("botao2", acaoBotao2);
actionMap.put("botao3", acaoBotao3);
actionMap.put("botao4", acaoBotao4);
actionMap.put("botao5", acaoBotao5);
actionMap.put("botao6", acaoBotao6);
actionMap.put("botao7", acaoBotao7);
actionMap.put("botao8", acaoBotao8);
actionMap.put("botao9", acaoBotao9);
actionMap.put("botao0", acaoBotao0);
actionMap.put("botaoApagar", acaoBotaoApagar);
painel.setActionMap(actionMap);
//Pegamos o input map que ocorre sempre que a janela atual está em foco
InputMap imap = painel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
//Associamos o pressionar das teclas (keystroke) aos eventos.
//O nome do KeyStroke pode ser obtido através da classe KeyEvent.
//Lá está cheio de constantes como KeyEvent.VK_NUMPAD1.
//Essa string é o nome sem o VK_
//Teclas da parte de cima do teclado.
imap.put(KeyStroke.getKeyStroke("1"), "botao1");
imap.put(KeyStroke.getKeyStroke("2"), "botao2");
imap.put(KeyStroke.getKeyStroke("3"), "botao3");
imap.put(KeyStroke.getKeyStroke("4"), "botao4");
imap.put(KeyStroke.getKeyStroke("5"), "botao5");
imap.put(KeyStroke.getKeyStroke("6"), "botao6");
imap.put(KeyStroke.getKeyStroke("7"), "botao7");
imap.put(KeyStroke.getKeyStroke("8"), "botao8");
imap.put(KeyStroke.getKeyStroke("9"), "botao9");
imap.put(KeyStroke.getKeyStroke("0"), "botao0");
//Botões do teclado numérico
imap.put(KeyStroke.getKeyStroke("NUMPAD1"), "botao1");
imap.put(KeyStroke.getKeyStroke("NUMPAD2"), "botao2");
imap.put(KeyStroke.getKeyStroke("NUMPAD3"), "botao3");
imap.put(KeyStroke.getKeyStroke("NUMPAD4"), "botao4");
imap.put(KeyStroke.getKeyStroke("NUMPAD5"), "botao5");
imap.put(KeyStroke.getKeyStroke("NUMPAD6"), "botao6");
imap.put(KeyStroke.getKeyStroke("NUMPAD7"), "botao7");
imap.put(KeyStroke.getKeyStroke("NUMPAD8"), "botao8");
imap.put(KeyStroke.getKeyStroke("NUMPAD9"), "botao9");
imap.put(KeyStroke.getKeyStroke("NUMPAD0"), "botao0");
imap.put(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0), "botaoApagar");
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new CalculadoraFrame().setVisible(true);
}
});
}
}
[/code]