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

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:

[code]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;
		}
	}

	}  

}[/code]

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

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.