Dúvidas no desenvolvimento da calculadora no Netbeans....Alguém poderia me ajudar!

Oi alguém poderia me ajudar??

Estou querendo montar uma calculadora igual do Windows para fins de aprendizagem, só que eu estou com o seguinte problema:

  • Tenho 10 jbuttons (de 0 - 9);
  • um Jtextfield (será o meu display, chamei o jtextfield de “resultado”);
  • 1 jbutton (=);
  • 4 jbuttons(+,-,*,/);

Estou fazendo o seguinte: para cada botão dos números(0 - 9), eu coloquei um ActionPerformed:
resultado.setText(“0”);


resultado.setText(“9”);

Só que quando eu quero fazer uma soma por exemplo:

23 + 5

ele não coloca o 2 depois o 3 na sequência no Jtextfield para formar o nº 23, ele vai colocando por cima, o que eu poderia fazer??? usar vetor??

Seguindo esse raciocínio na hora que eu aperto o botão “+”, como eu faço para SOMAR o primeiro valor que eu pressionei(antes de pressionar o +) com o segundo valor que eu pressionei(depois de ter pressionado o “+”)…, apertar o “=” e mostrar o resultado??

Será que estou pensando da maneira correta: quando eu pressionar o botão "+", ele adiciona(concatena) a o operador "+" na expressão(lá no meu Jtextfield com o próximo número que virá), e logo depois soma com o segundo conjunto de números digitados no Jtextfield.............................não consegui fazer isso.

Por Favor!!!
OBRIGADO!!!
Valew!!!

OPA!!

Cara, nunca mexi com esse JtextField (lido com outras coisas em Java) mas acredito que

resultado.setText(resultado.getText()+“0”) no caso do botão zero, irá funcionar!

Sempre tente dar uma olhadinha nos Docs do que precisar, normalmente eles ajudam muito, pois java tem uma documentação muito completa, mas se não achar o que queres, sempre estamos aqui dispostos ajudar.

Abraço

[quote=lcorbi]Oi alguém poderia me ajudar??

Só que quando eu quero fazer uma soma por exemplo:

23 + 5

ele não coloca o 2 depois o 3 na sequência no Jtextfield para formar o nº 23, ele vai colocando por cima, o que eu poderia fazer??? usar vetor??
Seguindo esse raciocínio na hora que eu aperto o botão “+”, como eu faço para SOMAR o primeiro valor que eu pressionei(antes de pressionar o +)
com o segundo valor que eu pressionei(depois de ter pressionado o “+”)…, apertar o “=” e mostrar o resultado??
[/quote]

crie uma variavel String vazia //String aux = “”;
no actionPerformed() de cada numero, concatene ele com a string aux, enquanto o botao nao for um operador

/* aperta 1, aux = "" + "1", ou seja, aux = "1"; aperta 2, aux = "1" + "2", ou seja, aux = "12"; assim por diante.. nao se esqueça de ir atualizando no JTextField esses numeros sempre que concatenados */
quando algum operador for apertado, converta essa string aux para int ou float(depende do seu projeto) e guarde em uma variavel de nome guarda
no actionPerformed() de cada operador, faça sua respectiva operação entre o valor da sua variavel guarda e 0(para + ou -) ou 1(para * ou /)

/* exemplo para o operador + guarda = 12; //valor convertido em int ou float da minha variavel String aux guarda = 12 + 0; aux = ""; //"zera" a string aux */
repita o passo para o segundo operando como descrito logo abaixo
concatene seu valor com a string, enquanto nao for pressionado o botao =

/* aperta 3, aux = "" + "1", ou seja, aux = "3"; aperta 4, aux = "1" + "2", ou seja, aux = "34"; assim por diante.. */
quando for pressionado o botao =
é feita a operaçao da variavel guarda com o novo valor da conversao de aux para int ou float

/* int result = guarda; //reslut = 12; primeiro operando para nao alterar a precedencia na operaçao de / (12/34 != 34/12) guarda = Integer.ParseInt(aux); //guarda = 34, valor convertido da string aux result = result + guarda; // result = 12 + 34; result = 46; */
para imprimir no componente:

resultado.setText(Integer.toString(result)); //escreve a string 46 no JTextField

adapte essa idéia ao seu projeto, esse foi apenas um rascunho
lembre que uma calculadora tem precedencia de operadores, e pode operar com mais que apenas 2 operandos (como esta nesse exemplo)

só uma coisa a adicionar… ao que eu começei a ler o que o xan escreveu, esta correto, (ao menos o que eu intendi pois só li o começo, e intendi queele tava correto até então).

o problema em vc ir adicinando em uma string, é que o numero não vai aparecendo em sua JTextField conforme vc clica nos botões (repare na calc do windows, conforme vc vai apertando os botões, eles ja vão aparecendo na caixa de texto acima e caso vc se perca, tem la os numeros que vc ja tc, ai esta a importancia de da um setText em cada botão apertado).

como o software fica mais “usavel” adicionando o numero na JTextField a cada botão apertado, vc não tem a necessidade de concatenar esse valor na String a cada botão apertado, eu aconselho adicionar o valor da caixa de texto (JTextField) na String quando o usuario aperta o botão de um dos operadores, ir adicionando os numeros que ele tc depois na caixa de texto da mesma forma, e ao o usuario aperta o igual, fazer a soma como abaixo:

//supondo que a variavel String valor ja tem o valor do primeiro numero, e a JTextField se chama caixaDeTexto e essa resultaado foi criada

resultado=Integer.parseInt(caixaDeTexto.getText())+Integer.parseInt(valor);

caixaDeTexto.setText(String.valueOf(resultado));

se a pessoa depois de tc um numero, um operador e outro numero, digitar outro operador, eu aconselho a vc primeiro fazer a operação e jogar o valor na JTextField, depois ao pegar o outro valor e dar igual…por ai vai…

outra coisa, la na calculadora do windows, vai ter padrão e cientifica, após terminar seu trabalho, veja la a cientifica como que funciona (que maldade a minha…huahuahauha)

após ver isso, tente fazer uma cientifica tb, de modo que que vc aproveite os metodos ja criados para ela, por exemplo, ao se clicar no botão de potencia, chamar o metodo da multiplicação enviando o que ta na JTextField tanto como multiplicador como também numero a ser multipicado. (entrando em reusabilidade).

espero ter ajudado em seus estudos.

Obrigado pela atenção pessoal do GUJ

olha o que eu fiz:

Variáveis públicas
public String v1;
[ b]int[/b] valor;

BOTÃO SOMA

private void somaActionPerformed(java.awt.event.ActionEvent evt) {                                     
    v1=resultado.getText();      //aqui é só pra guardar o valor em v1; e limpar o textfield para poder
    resultado.setText("");          // receber outro número

}

BOTÃO =

private void igualActionPerformed(java.awt.event.ActionEvent evt) {                                      
  Principal op = new Principal();
  [b]switch[/b](op){
    [b]case[/b] op.soma.getFocusListeners(): valor=Integer.parseInt(v1)+ Integer.parseInt(resultado.getText());         //aqui eu tentei fazer o seguinte: quando o botão [b]soma[/b] receber o focu ele executa valor=Integer.parseInt(v1)+ Integer.parseInt(resultado.getText())
    resultado.setText(String.valueOf(valor));
    [b]break;[/b]
      [b]case[/b] op.subtracao.getFocusListeners(): valor=Integer.parseInt(v1)- Integer.parseInt(resultado.getText());
    resultado.setText(String.valueOf(valor));
    [b]break;[/b]
  }

}

naum dá certoo, eu acho que eu estou usando o método errado, estou usando o getFocusListeners()(detalhe: nem sei pra que serve, só arrisquei).

Não teria jeito de fazer mais ou menos desse jeito que eu estou fazendoo???Usando o switch - case no botão = e como seria???

OBRIGADO!!!

Pelo que entendi vc não consegue ir armazenando os numeros conforme forem precionados os botões da calculadora como se fosse a calc do windows né… olhe ai não sei se já conseguir mas ai está como fiz…

public class JCalculadora extends javax.swing.JFrame {

String temp;
int op;
double n1, n2, r;

/** Creates new form JCalculadora */
public JCalculadora() {
    initComponents();
}

private void b0ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
temp = tfVisor.getText(); // Para que consiga ir clicando em um numero após o outro e estes irem gravando no seu TextFild vc deve utilizar uma variavel temporária pra ir armazenado.
temp = temp+“0”;
tfVisor.setText(temp);
}
.
.
.
.
//vc irá fazer isso para todos os seus botões de 0 a 9.

private void bMaisActionPerformed(java.awt.event.ActionEvent evt) {                                      
    // TODO add your handling code here:
    op = 1; //Opção 1 no meu caso é a soma, vc irá utiliza-la para as outras operações só alterar a opção
    n1 = Double.parseDouble(tfVisor.getText());
    tfVisor.setText("");
}                                     

private void bIgualActionPerformed(java.awt.event.ActionEvent evt) {                                       
    // TODO add your handling code here:
    n2 = Double.parseDouble(tfVisor.getText());//No botão resultado será mostrado o resultado do primeiro (+,-,*,/) para isso utilizei o método switch case
    switch (op) {
        case 1 : r = n1+ n2; break; // aqui é a soma, vc fará o mesmo para as outras operações aqui mesmo só alterando o  sinal e o numero da operação
    }
    tfVisor.setText(String.valueOf (r));
}                                      

private void RaizQuadradaActionPerformed(java.awt.event.ActionEvent evt) {                                             
    // TODO add your handling code here:
    double valor; // Aqui é o botão raiz quadrada.
    valor = Math.sqrt(Double.parseDouble(tfVisor.getText()));
    tfVisor.setText(String.valueOf(valor));
}   

Espero poder ter ajudado.

Desculpem pessoal agora que vi a data em que foi postada a duvida…

sempre bom ter registrado a solução para as duvidas pois pode ser que alguém tenha a mesma duvida e assim ja fica registrado no forum a solução para ela.

uma dica use as tag [ code ] [ /code ] (sem espaços) quando for postar código, facilita a visualização.
mais detalhes veja:
http://www.guj.com.br/posts/list/50115.java