Calculadora em Java

2 respostas
T

Olá galera estou com um codigo de uma calculadora e não estou conseguindo configurar nela o botão de backspace poderiam me ajudar.

package calc.br.ifsp;

import java.awt.<em>;

import java.awt.event.</em>;

import javax.swing.*;

public class calc {

public static void main(String[] args) {

CalculadoraFrame frame = new CalculadoraFrame();  
  frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );  
  frame.setVisible( true );

}

}

class CalculadoraFrame extends JFrame{

public CalculadoraFrame(){

setTitle("Calculadora");  
  CalculadoraPanel panel = new CalculadoraPanel();  
  add( panel );  
  pack();

}
}

class CalculadoraPanel extends JPanel{

public CalculadoraPanel(){

setLayout( new BorderLayout() );  
    
  result = 0;  
  lastCommand = "=";  
  start = true;  
    
  display = new JButton("0");  
  display.setEnabled( false );  
  add( display, BorderLayout.CENTER );  
    
  Action insertAction = new InsertAction();  
  Action commandAction = new CommandAction();  
    
  panel = new JPanel();  
  panel.setLayout( new GridLayout( 4, 4 ));  
    
  addButton("7", insertAction );  
  addButton("8", insertAction );  
  addButton("9", insertAction );  
  addButton("/", commandAction );  
    
  addButton("4", insertAction );  
  addButton("5", insertAction );  
  addButton("6", insertAction );
  addButton("*", commandAction );  
    
  addButton("1", insertAction );  
  addButton("2", insertAction );  
  addButton("3", insertAction );  
  addButton("-", commandAction );  
    
  addButton("0", insertAction ); 
  addButton(".", insertAction );  
  addButton("=", commandAction );  
  addButton("+", commandAction );  
    
  add( panel, BorderLayout.SOUTH );

// captura tecla, a letra teclada é viculada a uma string, por exemplo
// panel.2

InputMap imap = getInputMap( JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );  
    
  imap.put( KeyStroke.getKeyStroke('0'), "panel.0");  
    
  imap.put( KeyStroke.getKeyStroke('1'), "panel.1");  
  imap.put( KeyStroke.getKeyStroke('2'), "panel.2");  
  imap.put( KeyStroke.getKeyStroke('3'), "panel.3");  
    
  imap.put( KeyStroke.getKeyStroke('4'), "panel.4");  
  imap.put( KeyStroke.getKeyStroke('5'), "panel.5");  
  imap.put( KeyStroke.getKeyStroke('6'), "panel.6");  
    
  imap.put( KeyStroke.getKeyStroke('7'), "panel.7");  
  imap.put( KeyStroke.getKeyStroke('8'), "panel.8");  
  imap.put( KeyStroke.getKeyStroke('9'), "panel.9");  
    
  imap.put( KeyStroke.getKeyStroke('.'), "panel.ponto");  
  imap.put( KeyStroke.getKeyStroke('+'), "panel.somar");  
  imap.put( KeyStroke.getKeyStroke('-'), "panel.subtrair");  
  imap.put( KeyStroke.getKeyStroke('*'), "panel.multiplicar");  
  imap.put( KeyStroke.getKeyStroke('/'), "panel.dividir");  
  imap.put( KeyStroke.getKeyStroke('='), "panel.igual");

// mapa que vincula a string da tecla, por exemplo
// panel.2 a ação desejada

ActionMap amap = getActionMap();  
    
  amap.put("panel.0", insertAction );  
    
  amap.put("panel.1", insertAction );  
  amap.put("panel.2", insertAction );  
  amap.put("panel.3", insertAction );  
    
  amap.put("panel.4", insertAction );  
  amap.put("panel.5", insertAction );  
  amap.put("panel.6", insertAction );  
    
  amap.put("panel.7", insertAction );  
  amap.put("panel.8", insertAction );  
  amap.put("panel.9", insertAction );  
    
  amap.put("panel.ponto", insertAction );  
  amap.put("panel.somar", commandAction );  
  amap.put("panel.subtrair", commandAction );  
  amap.put("panel.multiplicar", commandAction );  
  amap.put("panel.dividir", commandAction );  
    
  amap.put("panel.igual", commandAction );

}

private void addButton( String label, ActionListener listener ){

JButton button = new JButton( label );  
  button.addActionListener( listener );  
  panel.add( button );

}

private class InsertAction extends AbstractAction{

public void actionPerformed( ActionEvent event ){  
       
     String input = event.getActionCommand();  
       
     if( start )  
     {  
        display.setText("");  
        start = false;  
     }  
       
     display.setText( display.getText() + input );  
       
  }

}

private class CommandAction extends AbstractAction{

public void actionPerformed( ActionEvent event ){  
       
     String command = event.getActionCommand();  
       
     if( start )  
     {  
        if( command.equals("-"))  
        {  
           display.setText(command);  
           start = false;  
        }  
        else  
        {  
           lastCommand = command;  
        }  
     }  
     else  
     {  
        calculate( Double.parseDouble(display.getText()));  
        lastCommand = command;  
        start = true;  
     }  
  }

}

public void calculate( double x ){

if ( lastCommand.equals("+") ) result += x;

else if ( lastCommand.equals("-") ) result -= x ;

else if ( lastCommand.equals("*") ) result *= x ;

else if ( lastCommand.equals("/") ) result /= x ;

else if ( lastCommand.equals("=") ) result = x ;

else if ( lastCommand.equals( KeyEvent.VK_ENTER ) ) result = x ;
display.setText("" + result );

}

private JButton display;

private JPanel panel;

private double result;

private String lastCommand;

private boolean start;

}

2 Respostas

Super_Fabio

com licença tigorodrigo , poderia colocar as tags [code] no seu código?

R

ola meu caro, tenho uma calculadora que usa CE, isto é apaga tudo que está na tela, geralmente as calculadoras, reagem assim não?

é uma dica…

esta calculadora, não está com os botões alinhados, mas isto não seria muito difícil. inclusive já fiz, mas acabei perdendo um grande projeto meu, ao arrumar o hd do micro.

enfim segue o código para vc ver, vou destacar o ponto principal no final…

valeu, poste um retorno…

import java.awt.Color;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calculadora  extends JFrame implements ActionListener{
    
    
        JButton espaco=new JButton("");
        JButton espaco2=new JButton("");
         JButton espaco3=new JButton("");
        
    
    
    JButton mais=new JButton("+");
  
  
   
    JButton menos=new JButton("-");
    
    
     
    JButton vezes=new JButton("*");
    JButton dividir=new JButton("/");
    JButton zero=new JButton("0");
    JButton um=new JButton("1");
    JButton dois=new JButton("2");
    JButton tres=new JButton("3");
    JButton quatro=new JButton("4");
    JButton cinco=new JButton("5");
    JButton seis=new JButton("6");
    JButton sete=new JButton("7");
    JButton oito=new JButton("8");
    JButton nove=new JButton("9");
     JButton igual=new JButton("=");
          JButton CE=new JButton("CE");
    //static double num1,num2,numeros,result;
    Scanner numeros = new Scanner(System.in);
    String sinal;
   int num1;
    int  num2;
    int result;
    
    JTextField mostrador;
    
     JPanel calc;
    
    public Calculadora(){
        
        setTitle("calculadora guj");
        setResizable(true);
        setSize(600, 600);
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setBackground(Color.yellow);
        
       mais.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
     menos.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
      vezes.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
     dividir.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
      zero.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
     um.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
      dois.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
     tres.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
      quatro.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
     cinco.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
      seis.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
     sete.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
         oito.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
     nove.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
     igual.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );

   
        
        
         calc= new JPanel();
        calc.setLayout( new GridLayout(5,3));
        mostrador= new JTextField("");
        mostrador.setSize(100,20);
             mostrador.setFont (new Font ("Sans Serif", Font.BOLD,28 ) );
        
        
        
        calc.add(mostrador);
        
     
         
            calc.add(um);
             calc.add(dois);
              calc.add(tres);
               calc.add(quatro);
                calc.add(cinco);
                 calc.add(seis);
                  calc.add(sete);
                   calc.add(oito);
                    calc.add(nove);
                      calc.add(zero);
                       calc.add(CE);
                       calc.add(mais);
                       
        calc.add(menos);
         calc.add(vezes);
          calc.add(dividir);
                        calc.add(igual);
             
              
              
              calc.add(espaco);
              calc.add(espaco2);
              calc.add(espaco3);
          
                    
                    add(calc);
                     CE.addActionListener(this);
                    mais.addActionListener(this);
                     menos.addActionListener(this);
                      vezes.addActionListener(this);
                       dividir.addActionListener(this);
                        igual.addActionListener(this);
                         zero.addActionListener(this);
                         um.addActionListener(this);
                           dois.addActionListener(this);
                            tres.addActionListener(this);
                             quatro.addActionListener(this);
                              cinco.addActionListener(this);
                               seis.addActionListener(this);
                                sete.addActionListener(this);
                                 oito.addActionListener(this);
                                 nove.addActionListener(this);                                 
                    
       
    
  
    
    }
    
     public void actionPerformed(ActionEvent e) {
        
          if (e.getSource() == CE) {
           CE();
        }
         
         
         if (e.getSource() == mais) {
            operMais();
        }
        if (e.getSource() == menos) {
            operMenos();
        }
        if (e.getSource() == dividir) {
            operDiv();
        }
        if (e.getSource() == vezes) {
            operVezes();
        }
         if (e.getSource() == zero) {
           
            String apice= mostrador.getText(); 
            String vaiLa=apice+"0";
            mostrador.setText(vaiLa); 
           
        }
         if (e.getSource() == um) {
        String apice2= mostrador.getText(); 
            String vaiLa2=apice2+"1";
            mostrador.setText(vaiLa2); 
        }
         if (e.getSource() == dois) {
        String apice3= mostrador.getText(); 
            String vaiLa3=apice3+"2";
         mostrador.setText(vaiLa3); 
        }
         if (e.getSource() == tres) {
             String apice4= mostrador.getText(); 
            String vaiLa4=apice4+"3";
             mostrador.setText(vaiLa4);  
        }
          if (e.getSource() == quatro) {
             String apice5= mostrador.getText(); 
            String vaiLa5=apice5+"4";
              mostrador.setText(vaiLa5);  
        }
          if (e.getSource() == cinco) {
             String apice6= mostrador.getText(); 
            String vaiLa6=apice6+"5";
              mostrador.setText(vaiLa6);  
        }
          if (e.getSource() == seis) {
             String apice7= mostrador.getText(); 
            String vaiLa7=apice7+"6";
            mostrador.setText(vaiLa7);   
        }
          
          if (e.getSource() == sete) {
             String apice8= mostrador.getText(); 
            String vaiLa8=apice8+"7";
              mostrador.setText(vaiLa8);   
        }
          if (e.getSource() == oito) {
             String apice9= mostrador.getText(); 
            String vaiLa9=apice9+"8";
              mostrador.setText(vaiLa9); 
        }
        if (e.getSource() == nove) {
             String apice10= mostrador.getText(); 
            String vaiLa10=apice10+"9";
               mostrador.setText(vaiLa10);  
        }
        
        if (e.getSource() == igual) {
             igual();    
        }
    // String apice= "";
      //      String vaiLa="";
            
     }
    
   
    public void um(){
        mostrador.setText("1");  
    }
    
    
    public void igual() {
        
        if (sinal.equals("+")) {   
           // mostrador.setText("");
            num2=Integer.parseInt(mostrador.getText());
            result=num1+num2;
          //  mostrador.setText("");
            mostrador.setText(""+result);
            num1=0;
            num2=0;
        }
        
        
       
           
            
        if (sinal.equals("-")) {            
            num2=Integer.parseInt(mostrador.getText());
            result=num1-num2;
            mostrador.setText(""+result);
            num1=0;
            num2=0;
        }
            
            
            
       
        if (sinal.equals("*")) {            
            num2=Integer.parseInt(mostrador.getText());
            result=num1*num2;
            mostrador.setText(""+result);
            num1=0;
            num2=0;
        }
        
        
        if (sinal.equals("/")) {            
            num2=Integer.parseInt(mostrador.getText());
            result=num1/num2;
            mostrador.setText(""+result);
            num1=0;
            num2=0;
        }
        
        
    }
    
   
    public void  operMais(){
       
    
      
       
       num1= Integer.parseInt(mostrador.getText());
        sinal="+";
        mostrador.setText("");
      
      
    }
    
    public void  operMenos(){
     num1= Integer.parseInt(mostrador.getText());
       sinal="-";
       mostrador.setText("");
       
       
       
    }
    
    public   void  operVezes(){
    num1= Integer.parseInt(mostrador.getText());
        sinal="*";
          mostrador.setText("");
      
    }
    
    public void operDiv(){
 num1= Integer.parseInt(mostrador.getText());
        sinal="/";
          mostrador.setText("");
       
        
        
        
    }
    public void CE() {
        mostrador.setText(""); 
    }
    
    
    
    public static void main(String args[]){
        
        
        new Calculadora().setVisible(true);
    }
}

então o Ce, na verdade apaga o textfield todo, que é o hábito das calculadoras,

mas para o bs (back space), vc poderia contar quantos números tem no textfield, e propor apagar o último…

pega a ‘string de números’, quem sabe, conta quantos tem, e apaga o último,

dá um trabalhinho, mas acredito que seja bem fácil…

valeu posta algo aí…

public void CE() { mostrador.setText(""); }

veja como meu modelo de calculadora é feito de uma forma diferente, existem muitas talvez, de fato só não está com os botões bem posicionados, como já expliquei. aí ao invés do layout, posiciona de fato um por um…

Criado 4 de dezembro de 2011
Ultima resposta 5 de dez. de 2011
Respostas 2
Participantes 3