Calcular os valores do GUI

1 resposta
jsnpereira

Olá, pessoal!

Estou duvidando como processo somar. por exemplo colocar um valor da compras e clique soma e aparece na próxima colocar mais valor para somar e armazenar os valores somando até clicar ok dá o resultado o total que foram comprados…

mas aqui programa tem alguns problemas e complicado. quando colocar o valor e clique soma ( para chamar próxima janela) e abriu outra janela (caso queria mesma janela como fosse calculadora que está calculando os valores armazenando no variável) e resultado ficou a Zero.

Esse GUI (interface gráfica) que eu tenho pouca conhecimento… nesta vez que vou aprender mais… Só que sei bem while, for e if e print da tela.

veja os códigos…

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;


public class Exe4 implements ActionListener {
	JFrame frame;
	JPanel panel, panel1;
	JTextField text;
	JButton button,button1;
	JLabel lbl;
	
	double soma=0;
	public static void main(String[] args) {
		Exe4 ex = new Exe4();
		
		ex.criaJanela();
	}
	
	public void criaJanela(){
		frame = new JFrame("Teste");
		frame.setSize(200,200);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setLayout(new GridLayout(2,1));
		
		panel = new JPanel();
		panel.setLayout(new GridLayout(1,2));
		
		button = new JButton("soma");
		button1 = new JButton("Ok");
		
		lbl = new JLabel("Coloca o valor:");
		text = new JTextField();
		
		panel.add(lbl);
		panel.add(text);
		
		frame.add(panel);
		
		panel1 = new JPanel();
		
		panel1.setLayout(new GridLayout(1,2));
		panel1.add(button);
		button.addActionListener(this);
		panel1.add(button1);
		button1.addActionListener(this);
		
		frame.add(panel);
		frame.add(panel1);
		
		frame.setVisible(true);
		
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == button){
			
			soma+=Double.parseDouble(text.getText());
			
			Exe4 exe = new Exe4();
			exe.criaJanela();
			
		} else if(e.getSource() == button1){
			JOptionPane.showMessageDialog(null, "O total da compras: "+soma);
		}
		
	}

}

Espero alguém se pudesse me ajudar a corrigir ou me dar uma dicas…

Obrigado!!

1 Resposta

Eric_Yuzo
public void actionPerformed(ActionEvent e) {
		if(e.getSource() == button){
			
			soma+=Double.parseDouble(text.getText());
			
			Exe4 exe = new Exe4(); // Cria um novo objeto Exe4, que possui seu próprio atributo soma, que é independente do atributo soma dos outros objetos criados.
			exe.criaJanela();
			
		} else if(e.getSource() == button1){
			JOptionPane.showMessageDialog(null, "O total da compras: "+soma);
		}
		
	}
O resultado aparece como zero, pois cada objeto Exe4 criado possui seu próprio atributo soma, que é inicializado com zero. Os atributos são variáveis de instância, ou seja, pertencem ao objeto, portanto a variável de cada objeto possuirá seu próprio valor, independente do que ocorre nos outros objetos.

É realmente necessário ficar abrindo uma nova janela para cada soma? Se for feito em uma única janela não terá este problema.

Criado 30 de novembro de 2010
Ultima resposta 1 de dez. de 2010
Respostas 1
Participantes 2