Olá senhores, Estou com uma dúvida: Estou criando uma aplicação, uma calculadora. Já configurei os botões com o ActionListener, usando uma classe interna e está tudo certinho e gostaria de fazer o mesmo com o teclado. Também criei uma classe interna implementando o KeyListener e copiei as ações dos botões nas ações do teclado.
O problema é que mesmo não configurando o KeyListener, usar teclado no JTexField vai funcionar do mesmo jeito. Ou seja, configurei a tecla ‘1’ e na calculadora fica digitado dois ‘1’. Gostaria de desabilitar essa configuração que o JTextField já faz naturalmente, para que apareça os números que eu adiciono da minha maneira no ActionListiner que fiz. Eis o código todo, caso tenham curiosidade:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import Calculos.Calculos;
public class Calculadora extends JFrame {
JPanel grid01;
JPanel grid02;
JPanel grid03;
JTextField campoCalculadora;
JButton um;
JButton dois;
JButton tres;
JButton quatro;
JButton cinco;
JButton seis;
JButton sete;
JButton oito;
JButton nove;
JButton zero;
JButton adicao;
JButton subtracao;
JButton multiplicacao;
JButton divisao;
JButton limpar;
JButton igual;
JButton virgula;
JButton botaoBranco1;
JButton botaoBranco2;
JButton botaoBranco3;
//Outras variaveis para controle
Calculos calc;
boolean controleNum = true;
public Calculadora(){
//Instanciando objetos de suporte
//Instanciando os objetos do 1ºJPanel
campoCalculadora = new JTextField("0");
campoCalculadora.setFocusable(true);
//campoCalculadora.getActionListeners();
//campoCalculadora.setRequestFocusEnabled(false);
//Instanciando os objetos do 2ºJPanel
zero = new JButton("0");
um = new JButton("1");
dois = new JButton("2");
tres = new JButton("3");
quatro = new JButton("4");
cinco = new JButton("5");
seis = new JButton("6");
sete = new JButton("7");
oito = new JButton("8");
nove = new JButton("9");
adicao = new JButton("+");
subtracao = new JButton("-");
divisao = new JButton("/");
multiplicacao = new JButton("*");
limpar = new JButton("C");
igual = new JButton("=");
virgula = new JButton(",");
botaoBranco1 = new JButton(" ");
botaoBranco2 = new JButton(" ");
botaoBranco3 = new JButton(" ");
//Arrumando a margem dos botoes
// Insets formatJButton = new Insets(1,1,1,1);
// um.setMargin(formatJButton);
// dois.setMargin(formatJButton);
// tres.setMargin(formatJButton);
// quatro.setMargin(formatJButton);
// cinco.setMargin(formatJButton);
// seis.setMargin(formatJButton);
// sete.setMargin(formatJButton);
// oito.setMargin(formatJButton);
// nove.setMargin(formatJButton);
// zero.setMargin(formatJButton);
//
// adicao.setMargin(formatJButton);
// subtracao.setMargin(formatJButton);
// multiplicacao.setMargin(formatJButton);
// divisao.setMargin(formatJButton);
// limpar.setMargin(formatJButton);
// igual.setMargin(formatJButton);
// virgula.setMargin(formatJButton);
//Adicionando os objetos no 1ºJPanel - Centro
grid01 = new JPanel(new GridLayout(1,1));
grid01.add(campoCalculadora);
//Adicionando os objetos no 2ºJPanel - Sul
grid02 = new JPanel(new GridLayout(5,3));
grid02.add(um);
grid02.add(dois);
grid02.add(tres);
//grid02.add(adicao);
grid02.add(quatro);
grid02.add(cinco);
grid02.add(seis);
//grid02.add(subtracao);
grid02.add(sete);
grid02.add(oito);
grid02.add(nove);
//grid02.add(multiplicacao);
grid02.add(zero);
grid02.add(subtracao);
grid02.add(multiplicacao);
//grid02.add(divisao);
grid02.add(limpar);
grid02.add(igual);
grid02.add(virgula);
//grid02.add(divisao);
//Adicionando os objetos no 3ºJPanel - Sul
grid03 = new JPanel(new GridLayout(5,1));
grid03.add(adicao);
grid03.add(divisao);
grid03.add(botaoBranco1);
grid03.add(botaoBranco2);
grid03.add(botaoBranco3);
//Adicionado as acoes para os objetos
Ouvinte ov = new Ouvinte();
OuvinteTeclado ovT = new OuvinteTeclado();
calc = new Calculos();
//Adicionando acao dos botoes
um.addActionListener(ov);
dois.addActionListener(ov);
tres.addActionListener(ov);
quatro.addActionListener(ov);
cinco.addActionListener(ov);
seis.addActionListener(ov);
sete.addActionListener(ov);
oito.addActionListener(ov);
nove.addActionListener(ov);
limpar.addActionListener(ov);
igual.addActionListener(ov);
adicao.addActionListener(ov);
subtracao.addActionListener(ov);
multiplicacao.addActionListener(ov);
divisao.addActionListener(ov);
virgula.addActionListener(ov);
//Acoes das teclas
campoCalculadora.addKeyListener(ovT);
this.getContentPane().add(grid01, BorderLayout.NORTH);
this.getContentPane().add(grid02, BorderLayout.CENTER);
this.getContentPane().add(grid03, BorderLayout.EAST);
pack();
//setSize(300,200);
this.setTitle("Calculadora");
this.setVisible(true);
this.setResizable(false);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args){
//JOptionPane.showMessageDialog(null, );
Calculadora secaoCalculadora = new Calculadora();
}
class Ouvinte implements ActionListener{
public void actionPerformed(ActionEvent evt){
// KeyListener opa[] = campoCalculadora.getKeyListeners();
// for(int i = 0; i<opa.length;i++){
// JOptionPane.showMessageDialog(null, ""+opa[i].toString());
// }
if(evt.getSource() == um){
if(controleNum){
campoCalculadora.setText("");
controleNum = false;
}
campoCalculadora.setText(campoCalculadora.getText()+"1");
if(calc.getTipoOperacao() == 0)
calc.setPrimeiroValor(campoCalculadora.getText());
else
calc.setSegundoValor(campoCalculadora.getText());
}
if(evt.getSource() == dois){
if(controleNum){
campoCalculadora.setText("");
controleNum = false;
}
campoCalculadora.setText(campoCalculadora.getText()+"2");
if(calc.getTipoOperacao() == 0)
calc.setPrimeiroValor(campoCalculadora.getText());
else
calc.setSegundoValor(campoCalculadora.getText());
}
if(evt.getSource() == tres){
if(controleNum){
campoCalculadora.setText("");
controleNum = false;
}
campoCalculadora.setText(campoCalculadora.getText()+"3");
if(calc.getTipoOperacao() == 0)
calc.setPrimeiroValor(campoCalculadora.getText());
else
calc.setSegundoValor(campoCalculadora.getText());
}
if(evt.getSource() == quatro){
if(controleNum){
campoCalculadora.setText("");
controleNum = false;
}
campoCalculadora.setText(campoCalculadora.getText()+"4");
if(calc.getTipoOperacao() == 0)
calc.setPrimeiroValor(campoCalculadora.getText());
else
calc.setSegundoValor(campoCalculadora.getText());
}
if(evt.getSource() == cinco){
if(controleNum){
campoCalculadora.setText("");
controleNum = false;
}
campoCalculadora.setText(campoCalculadora.getText()+"5");
if(calc.getTipoOperacao() == 0)
calc.setPrimeiroValor(campoCalculadora.getText());
else
calc.setSegundoValor(campoCalculadora.getText());
}
if(evt.getSource() == seis){
if(controleNum){
campoCalculadora.setText("");
controleNum = false;
}
campoCalculadora.setText(campoCalculadora.getText()+"6");
if(calc.getTipoOperacao() == 0)
calc.setPrimeiroValor(campoCalculadora.getText());
else
calc.setSegundoValor(campoCalculadora.getText());
}
if(evt.getSource() == sete){
if(controleNum){
campoCalculadora.setText("");
controleNum = false;
}
campoCalculadora.setText(campoCalculadora.getText()+"7");
if(calc.getTipoOperacao() == 0)
calc.setPrimeiroValor(campoCalculadora.getText());
else
calc.setSegundoValor(campoCalculadora.getText());
}
if(evt.getSource() == oito){
if(controleNum){
campoCalculadora.setText("");
controleNum = false;
}
campoCalculadora.setText(campoCalculadora.getText()+"8");
if(calc.getTipoOperacao() == 0)
calc.setPrimeiroValor(campoCalculadora.getText());
else
calc.setSegundoValor(campoCalculadora.getText());
}
if(evt.getSource() == nove){//Ações do botão 9
if(controleNum){
campoCalculadora.setText("");
controleNum = false;
}
campoCalculadora.setText(campoCalculadora.getText()+"9");
if(calc.getTipoOperacao() == 0)
calc.setPrimeiroValor(campoCalculadora.getText());
else
calc.setSegundoValor(campoCalculadora.getText());
}
if(evt.getSource() == limpar){//Ações do botão c
campoCalculadora.setText("");
calc.limpaPrimeiroValor();
calc.limpaSegundoValor();
calc.setTipoOperacao(0);
}
if(evt.getSource() == igual){//Ações do botão =
campoCalculadora.setText(calc.calcularResultado());
calc.setPrimeiroValor(campoCalculadora.getText());
calc.setTipoOperacao(0);
controleNum = true;
}
if(evt.getSource() == adicao){ //Ações do botão +
if(!campoCalculadora.getText().isEmpty()){
if(calc.getTipoOperacao() == 0){
calc.setTipoOperacao(1);
controleNum = true;
}
else{
campoCalculadora.setText(calc.calcularResultado());
calc.setPrimeiroValor(campoCalculadora.getText());
calc.setTipoOperacao(1);
controleNum = true;
calc.limpaSegundoValor();
}
}
}
if(evt.getSource() == subtracao){ //Ações do botão -
if(calc.getTipoOperacao() == 0){
calc.setTipoOperacao(2);
controleNum = true;
//campoCalculadora.setText("");
}
else{
campoCalculadora.setText(calc.calcularResultado());
calc.setPrimeiroValor(campoCalculadora.getText());
calc.setTipoOperacao(2);
controleNum = true;
calc.limpaSegundoValor();
}
}
if(evt.getSource() == multiplicacao){ //Ações do botão *
if(!campoCalculadora.getText().isEmpty()){
if(calc.getTipoOperacao() == 0){
calc.setTipoOperacao(3);
controleNum = true;
}
else{
campoCalculadora.setText(calc.calcularResultado());
calc.setPrimeiroValor(campoCalculadora.getText());
calc.setTipoOperacao(3);
controleNum = true;
calc.limpaSegundoValor();
}
}
}
if(evt.getSource() == divisao){ //Ações do botão /
if(!campoCalculadora.getText().isEmpty()){
if(calc.getTipoOperacao() == 0){
calc.setTipoOperacao(4);
controleNum = true;
}
else{
campoCalculadora.setText(calc.calcularResultado());
calc.setPrimeiroValor(campoCalculadora.getText());
calc.setTipoOperacao(4);
controleNum = true;
calc.limpaSegundoValor();
}
}
}
if(evt.getSource() == virgula){
if(!campoCalculadora.getText().isEmpty() && !campoCalculadora.getText().contains(",")){
campoCalculadora.setText(campoCalculadora.getText()+",");
}
}
}
}
class OuvinteTeclado implements KeyListener{
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void keyPressed(KeyEvent e) {
if(e.getKeyChar() == KeyEvent.VK_1 || e.getKeyChar() == KeyEvent.VK_NUMPAD1){
if(controleNum){
campoCalculadora.setText("");
controleNum = false;
}
campoCalculadora.setText(campoCalculadora.getText()+"1");
if(calc.getTipoOperacao() == 0)
calc.setPrimeiroValor(campoCalculadora.getText());
else
calc.setSegundoValor(campoCalculadora.getText());
}
}
}
}
Obrigado, :lol: