Somar 2 JTextField e mostra em um 3º JTextField

9 respostas
Rudy

Eu estou fazendo uma pequena calculado com as quatro operações basicas, mas não estou conseguindo exibir os resultado delo no determinado lugar.

Eu tenho na verdade 4 campos JTextField onde o o primeiro recebe um valor, o segundo exibe o simbola da operação selecionara, o terceiro recebe o outro valor e o ultimo exibe o resultado dos campos 1 e 3. Abaixo esta o trecho do código que estou tentando fazer e em seguida esta o código inteiro

public void actionPerformed(ActionEvent e) { if(e.getSource() == soma){ op.setText("+"); if(op.equals("+") && (e.getSource() == result)){ int resultado = Integer.parseInt(n1.getText()) + Integer.parseInt(n2.getText()); rst.setText(String.valueOf(resultado)); } }

código inteiro

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Calculadora extends JFrame implements ActionListener {
	//campos para exibir os valores
	private JTextField n1, n2, rst;
	private JTextField op;//exibe tipo de operação
	//botões das operações calculadora
	private JButton soma, subt, div, mult, result;	
	
	//construtor
	public Calculadora(){		
		//instância campos para exibir os valores
        n1 = new JTextField(5);
        op = new JTextField(1);
        n2 = new JTextField(5);
        rst = new JTextField(5);
        //instância botões da calculadora
        soma = new JButton("+");
        subt = new JButton("-");
        div = new JButton("/");
        mult = new JButton("x");
        result = new JButton("=");
		//instância uma janela para os componetes
        Container janela = getContentPane();
        janela.setLayout(new FlowLayout());         
        //inclusão dos elementos no container
        janela.add(n1);
        janela.add(op);
        janela.add(n2);
        janela.add(result);        
        janela.add(rst); 
        janela.add(soma);
        janela.add(subt);
        janela.add(mult);
        janela.add(div);
        //associa receptor de ação aos botões
        soma.addActionListener(this);
        subt.addActionListener(this);
        div.addActionListener(this);
        mult.addActionListener(this);
        result.addActionListener(this); 
        //define o frame
        setSize(300,125);
        setTitle("Calculadora");
        setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == soma){
			op.setText("+");
			if(op.equals("+") && (e.getSource() == result)){
			  int resultado = Integer.parseInt(n1.getText()) + Integer.parseInt(n2.getText()); 			     
			  rst.setText(String.valueOf(resultado));  
			}
		}

		if (e.getSource() == subt){
			op.setText("-");
		}
		if (e.getSource() == mult){
			op.setText("x");
		}
		if (e.getSource() == div){
			op.setText("/");
		}
		
	}	
	public static void main(String[] args) {
		Calculadora c = new Calculadora();
		c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		}

}

Alguem pode me dar uma ajuda e me dizer por que o que eu implementei não esta funcioando?

9 Respostas

zoren

deixa eu ver se eu entendi

no segundo JtextField vc recebe a operação e depois clica no botão da operação correspondente??

mas enfim, acho q o problema é esse trecho

&& (e.getSource() == result)

o getSource() vc compara com o componente que disparou a ação (algo assim)

no primeiro if vc pergunta se quem disparou a ação foi o botão de soma, depois no segundo pergunta se quem disparou a ação foi o botão de resultado,

se ele entrar no primeiro if, ele n passa no segundo

e se ele entrar no primeiro, ele n entra no segundo, pq n foi o botão soma q disparou o evento

é só vc rever um pouco a sua lógica que vc consegue

71C4700

Veja se este topico lhe ajuda

http://www.guj.com.br/posts/list/119655.java

A

jTextField3.setText(jTextField1.getText() + jTextField2.getText());

Usa o código acima, mas modifica ele para funcionar para suas operações.

Seria isso?

Rudy

zoren:
deixa eu ver se eu entendi

no segundo JtextField vc recebe a operação e depois clica no botão da operação correspondente??

mas enfim, acho q o problema é esse trecho

&& (e.getSource() == result)

o getSource() vc compara com o componente que disparou a ação (algo assim)

no primeiro if vc pergunta se quem disparou a ação foi o botão de soma, depois no segundo pergunta se quem disparou a ação foi o botão de resultado,

se ele entrar no primeiro if, ele n passa no segundo

e se ele entrar no primeiro, ele n entra no segundo, pq n foi o botão soma q disparou o evento

é só vc rever um pouco a sua lógica que vc consegue

Ele tem que funcionar assim:
Preencho os dois campos 1 e 3 com valores inteiros e o campo 2 qunado eu clicar na operação desejada tem que mostrar o sinal da operação e só ai quando eu clicar em result ele mostra o resultado no campo 4, deu para entender?

A
String a = campo1.getText();
int a1 = Integer.parseInt(a); 
String b = campo2.getText();
String c = campo3.getText();
int c1 = Integer.parseInt(c); 

//faz um if/else pra sabe qual operação foi marcada no B

int d = a1 + c1;

campo4.setText(d);
Rudy

Ele tem que funcionar assim:
Preencho os dois campos 1 e 3 com valores inteiros e o campo 2 qunado eu clicar na operação desejada tem que mostrar o sinal da operação e só ai quando eu clicar em result ele mostra o resultado no campo 4, deu para entender?

Essa sequencia de passoas que ta me enrolando

Rudy

Não se posso fazer isso.

Fiz um novo método para fazer os calculos e mostrar o resultado separado daquele que recebe a atribuição, mas mesmo assim contia sem mostrar o resultado no campo jtextField result

//Faz as operações e mostra o resultado public void resultado(ActionEvent evt){ if(op.getText().equals("+") && (evt.getSource() == result)){ int resultado = Integer.parseInt(n1.getText()) + Integer.parseInt(n2.getText()); rst.setText(String.valueOf(resultado)); } }

Rudy

Rudy:
Não se posso fazer isso.

Fiz um novo método para fazer os calculos e mostrar o resultado separado daquele que recebe a atribuição, mas mesmo assim contia sem mostrar o resultado no campo jtextField result

//Faz as operações e mostra o resultado public void resultado(ActionEvent evt){ if(op.getText().equals("+") && (evt.getSource() == result)){ int resultado = Integer.parseInt(n1.getText()) + Integer.parseInt(n2.getText()); rst.setText(String.valueOf(resultado)); } }

Mais alguma opnião? Ainda necessito de um help :smiley:

F

Um bocado aldrabado, mas fica aui uma dica. Para mostrar o resultado e melhor um Label.

package GUI;

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.GridBagLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

/**
*

  • @author Florival
    */
    public class CalculadoraVersaoBeta extends JFrame{

    JTextField valor1, valor2, op, res;

    JButton igual,n7;
    
    JLabel resultado;
    
    public CalculadoraVersaoBeta()
    
    {
    
    super(calculadora);//nome 1
    
    valor1 = new JTextField();
     op = new JTextField();
     valor2 = new JTextField();
     igual = new JButton("=");
     resultado = new JLabel();
     res = new JTextField();
     igual.addActionListener(new BotaoIgual());
             
    
     Container c = getContentPane();
     c.setLayout(new GridLayout(1,5));
     c.add(valor1);     
     c.add(op);
     c.add(valor2);
     c.add(igual);
     c.add(resultado);
     
     setDefaultCloseOperation(EXIT_ON_CLOSE); //Para fechar tudo quando clico no x 1
     setVisible(true); //janela visivel 1
     setSize(500,150);//dimisões da janela 1
    

    }
    /**

    • @param args the command line arguments
      */
      public static void main(String[] args) {
      new CalculadoraVersaoBeta(); //1

    }

    class BotaoIgual implements ActionListener
    {

    @Override
     public void actionPerformed(ActionEvent e) {
         if(op.getText().equals("+"))
         {
             int resultado1 = Integer.parseInt(valor1.getText()) + Integer.parseInt(valor2.getText());
             resultado.setText(String.valueOf(resultado1));  
             //JOptionPane.showMessageDialog(null, resultado1);
         } 
         else if(op.getText().equals("-"))
         {
             int resultado1 = Integer.parseInt(valor1.getText()) - Integer.parseInt(valor2.getText());
             //JOptionPane.showMessageDialog(null, resultado1);
             resultado.setText(String.valueOf(resultado1));
         }else if(op.getText().equals("*"))
         {
             int resultado1 = Integer.parseInt(valor1.getText()) * Integer.parseInt(valor2.getText());
             //JOptionPane.showMessageDialog(null, resultado1);
             resultado.setText(String.valueOf(resultado1));
         }else if(op.getText().equals("/"))
         {
             int resultado1 = Integer.parseInt(valor1.getText()) / Integer.parseInt(valor2.getText());
             //JOptionPane.showMessageDialog(null, resultado1);
             resultado.setText(String.valueOf(resultado1));
         } else
         {
             JOptionPane.showMessageDialog(null, "erro");//Exception
         }
             
         //To change body of generated methods, choose Tools | Templates.
     }
    

    }

}

Criado 3 de maio de 2009
Ultima resposta 24 de out. de 2014
Respostas 9
Participantes 5