Calculadora básica em JAVA. Aceitar entradas pelo teclado, e layout diferente. DUVIDA?

2 respostas
E

Ola, estou fazendo um trabalho para facul, tenho que fazer uma calculadora basica em java, ela ja esta funcionando, mas gostaria de saber com que faço, para a calculadora tb aceitar entradas de valor pelo teclado, e tb as operações como soma, mult, sub, e divião, tb ser aceitas eu apertando pelo teclado.

e como que eu poderia mudar o layout dela para outro, como eu mudificaria isso, por enquando soh sei trabalhar com o FlowLayout, ja tentei com outros e naum consegui. e também quero separar as teclas da tela de texto.

Obs. ela esta funcionando normal, osh esta faltando esses detalhes que falei.

Por favor, alguma alma bondosa me ajuda ae?? :roll:

import java.awt.*;//importa as classes do pacote "awt"
import java.awt.event.*;//importa as classes do pacote "event"
import javax.swing.*;//importa as classes do pacote "swing"

class Exemplo0902 extends JFrame implements ActionListener{//inicia a classe "Exemplo0902" herdando métodos da classe "JFrame"
	JButton b1,b2,b3,b4,b5,b6,b7,b8,b9,b0,bsoma,bmult,bdivi,bsub,bigual,blimpa,bponto;
	JTextField tela;
	private char op;
	private String num;
	private String numtela="";
	private double ac=0, a=0;

	public static void main(String args[]){
		JFrame janela = new Exemplo0902();
		janela.setUndecorated(true);
		janela.getRootPane().setWindowDecorationStyle(JRootPane.FRAME); 
		janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		janela.setVisible(true);
	}

	Exemplo0902(){
		setTitle("Calculadora");
		setBounds(200,200,200,200);
		setLocation(100,100);
		getContentPane().setBackground(Color.black);
		setLayout(new FlowLayout());	
		b1 = new JButton("1");
		b1.addActionListener(this);
		b2 = new JButton("2");
		b2.addActionListener(this);
		b3 = new JButton("3");
		b3.addActionListener(this);
		b4 = new JButton("4");
		b4.addActionListener(this);
		b5 = new JButton("5");
		b5.addActionListener(this);
		b6 = new JButton("6");
		b6.addActionListener(this);
		b7 = new JButton("7");
		b7.addActionListener(this);
		b8 = new JButton("8");
		b8.addActionListener(this);
		b9 = new JButton("9");
		b9.addActionListener(this);
		b0 = new JButton("0");
		b0.addActionListener(this);
		bsoma = new JButton("+");
		bsoma.addActionListener(this);
		bsub = new JButton("-");
		bsub.addActionListener(this);
		bmult = new JButton("x");
		bmult.addActionListener(this);
		bdivi = new JButton("/");
		bdivi.addActionListener(this);
		blimpa = new JButton("C");
		blimpa.addActionListener(this);
		bigual = new JButton("=");
		bigual.addActionListener(this);
		bponto = new JButton(".");
		bponto.addActionListener(this);
		tela = new JTextField(10);

		getContentPane().add(tela);
		getContentPane().add(blimpa);
		getContentPane().add(b9);
		getContentPane().add(b8);
		getContentPane().add(b7);
		getContentPane().add(bdivi);
		getContentPane().add(b4);
		getContentPane().add(b5);
		getContentPane().add(b6);
		getContentPane().add(bmult);
		getContentPane().add(b1);
		getContentPane().add(b2);
		getContentPane().add(b3);
		getContentPane().add(bsub);
		getContentPane().add(b0);
		getContentPane().add(bponto);
		getContentPane().add(bigual);
		getContentPane().add(bsoma);
		
	}
	public void actionPerformed(ActionEvent e) { 
		if (e.getSource() == blimpa){
			tela.setText("");
			numtela="";
	   	}  
      	   	if ((e.getSource() == bsoma) || (e.getSource() == bsub) || (e.getSource() == bmult) || (e.getSource() == bdivi) ){
			try{      	    		
				if (e.getSource() == bsoma){
					a = Double.parseDouble( numtela );
					ac = ac + a;
					tela.setText("");
					numtela="";
					op = '+';
				} 
       				else if (e.getSource() == bsub){
					a = Double.parseDouble( numtela );
					ac = ac - a;
					tela.setText("");
					numtela="";
					op = '-';
				}  
       				else if (e.getSource() == bdivi){
					a = Double.parseDouble( numtela );
					ac = ac / a;
					tela.setText("");
					numtela="";
      	 				op = '/';
				}  
       				else if (e.getSource() == bmult){
					a = Double.parseDouble( numtela );
					ac = ac * a;
					tela.setText("");
					numtela="";			
					op = '*';
				}
			}
			catch(NumberFormatException erro){
				tela.setText("Erro");
				return;
			}
	   	}
		if ((e.getSource() == b1)||(e.getSource() == b2)||(e.getSource() == b3)|| (e.getSource() == b4)||(e.getSource() == b5)|| (e.getSource() == b6)||(e.getSource() == b7)||(e.getSource() == b8)||(e.getSource() == b9)|| (e.getSource() == b0)||(e.getSource() == bponto)){
       		if (e.getSource() == b1) num = "1";
       		else if (e.getSource() == b2) num = "2";

       		else if (e.getSource() == b3) num = "3";

       		else if (e.getSource() == b4) num = "4";

       		else if (e.getSource() == b5) num = "5";

       		else if (e.getSource() == b6) num = "6";
	
       		else if (e.getSource() == b7) num = "7";

       		else if (e.getSource() == b8) num = "8";

       		else if (e.getSource() == b9) num = "9";

       		else if (e.getSource() == b0) num = "0";
	
		else if (e.getSource() == bponto) num = ".";
		numtela=numtela+num;
		tela.setText(""+numtela);

		}

		if (e.getSource() == bigual){
			try{
				if (op == '+'){
					a = Double.parseDouble( numtela );
					ac = ac + a;
					tela.setText(""+ac);
				} 
       				else if (op == '-'){
					a = Double.parseDouble( numtela );
					ac = ac - a;
					tela.setText(""+ac);
				}  
       				else if (op == '/'){
					a = Double.parseDouble( numtela );
					ac = ac / a;
					tela.setText(""+ac);
				}  
       				else if (op =='*'){
					a = Double.parseDouble( numtela );
					ac = ac * a;
					tela.setText(""+ac);
				}
				numtela = tela.getText();
				ac = 0;
			}
			catch(NumberFormatException erro){
				tela.setText("Erro");
				return;
			}
		}

    	}  
   
 

}

2 Respostas

E

Pessoal, acabei de ver aki, e ela esta com problema na sub, mult e div.
O q pode ser?

wagnerfrancisco

Pra tornar possível entrada pelo teclado, tem várias formas. Uma coisa que você pode fazer é ler o texto do jtextfield tela. Do jeito que tu faz agora esse jTextField só serve pra mostrar o que é pressionado pelo botão, mas você pode ler o que foi digitado nele também. Uma sugestão é adicionar um KeyListener em tela, aí, quando uma tecla é pressionada você verifica se é uma operação. Se for, leia o que está na tela e realize a operação solicitada (ou apenas guarde o valor, depende do caso).

Olhando o teu código por cima, o teu problema parece que é aqui:

a = Double.parseDouble(numtela);
ac = ac + a;

Repare que numa soma tudo bem, mas numa multiplicação, divisão ou subtração você não pode fazer isso. Se fizer ac * a, e ac inicia com zero, o teu acumulador continua em zero, e tu nunca saí desse resultado. :stuck_out_tongue:

Falou.

Criado 21 de agosto de 2008
Ultima resposta 21 de ago. de 2008
Respostas 2
Participantes 2