Olá, pessoal. Ressucitando o Topico!
Tb me deu uma de criar uma calculadora, mais imitando a do windows. O negócio é que to com um probleminha de logica.
Quando clico, por exemplo, no botão +, automaticamente a soma pe feita, e não é feita quando eu aperto a outra operação, como deveria ser. Esse problema eu sei o que é, mas nao consegui pensar (quase) numa forma de imitar a calculadora do windows.
package calculadora;
/**
*
* @author Jhonatas
*/
public class Calculadora extends javax.swing.JFrame {
String operacao;
String operacao2;
String botao;
String num = "";
double num1 = 0;
double num2 = 0;
public Calculadora() {
initComponents();
tf_display.requestFocus();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
tf_display = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel();
botao_0 = new javax.swing.JButton();
botao_coma = new javax.swing.JButton();
botao_subtrair = new javax.swing.JButton();
botao_somar = new javax.swing.JButton();
botao_multiplicar = new javax.swing.JButton();
botao_4 = new javax.swing.JButton();
botao_5 = new javax.swing.JButton();
botao_6 = new javax.swing.JButton();
botao_3 = new javax.swing.JButton();
botao_2 = new javax.swing.JButton();
botao_1 = new javax.swing.JButton();
botao_7 = new javax.swing.JButton();
botao_8 = new javax.swing.JButton();
botao_9 = new javax.swing.JButton();
botao_dividir = new javax.swing.JButton();
botao_igual = new javax.swing.JButton();
jButton21 = new javax.swing.JButton();
botao_porcentagem = new javax.swing.JButton();
tf_display2 = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jButton1.setText("jButton1");
jButton2.setText("jButton2");
botao_0.setText("0");
botao_0.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_0ActionPerformed(evt);
}
});
botao_coma.setText(",");
botao_coma.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_comaActionPerformed(evt);
}
});
botao_subtrair.setText("-");
botao_subtrair.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_subtrairActionPerformed(evt);
}
});
botao_somar.setText("+");
botao_somar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_somarActionPerformed(evt);
}
});
botao_multiplicar.setText("*");
botao_multiplicar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_multiplicarActionPerformed(evt);
}
});
botao_4.setText("4");
botao_4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_4ActionPerformed(evt);
}
});
botao_5.setText("5");
botao_5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_5ActionPerformed(evt);
}
});
botao_6.setText("6");
botao_6.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_6ActionPerformed(evt);
}
});
botao_3.setText("3");
botao_3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_3ActionPerformed(evt);
}
});
botao_2.setText("2");
botao_2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_2ActionPerformed(evt);
}
});
botao_1.setText("1");
botao_1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_1ActionPerformed(evt);
}
});
botao_7.setText("7");
botao_7.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_7ActionPerformed(evt);
}
});
botao_8.setText("8");
botao_8.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_8ActionPerformed(evt);
}
});
botao_9.setText("9");
botao_9.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_9ActionPerformed(evt);
}
});
botao_dividir.setText("/");
botao_dividir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_dividirActionPerformed(evt);
}
});
botao_igual.setText("=");
botao_igual.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botao_igualActionPerformed(evt);
}
});
jButton21.setText("1/x");
botao_porcentagem.setText("%");
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addComponent(botao_1, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(botao_2, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(botao_3, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(botao_subtrair, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(botao_4, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(botao_5, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(6, 6, 6))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(botao_0, javax.swing.GroupLayout.DEFAULT_SIZE, 120, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(botao_6, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(botao_multiplicar, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(botao_coma, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(botao_somar, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(botao_7, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(botao_8, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(botao_9, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(botao_dividir, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(botao_porcentagem, 0, 0, Short.MAX_VALUE)
.addComponent(botao_igual, 0, 0, Short.MAX_VALUE)
.addComponent(jButton21, javax.swing.GroupLayout.DEFAULT_SIZE, 57, Short.MAX_VALUE))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(botao_7, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_8, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_9, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_dividir, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_porcentagem, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(botao_4, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_5, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_6, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_multiplicar, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jButton21, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(botao_subtrair, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_3, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_2, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_1, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(botao_somar, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_coma, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botao_0, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(6, 6, 6)
.addComponent(botao_igual, javax.swing.GroupLayout.DEFAULT_SIZE, 88, Short.MAX_VALUE)))
.addContainerGap())
);
tf_display2.setBackground(new java.awt.Color(255, 255, 255));
tf_display2.setEditable(false);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tf_display, javax.swing.GroupLayout.DEFAULT_SIZE, 329, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jButton2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton1))
.addComponent(tf_display2, javax.swing.GroupLayout.DEFAULT_SIZE, 329, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(31, 31, 31)
.addComponent(tf_display2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tf_display, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 110, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
pack();
}// </editor-fold>
private void botao_0ActionPerformed(java.awt.event.ActionEvent evt) {
botao = "0";
getNum();
}
private void botao_1ActionPerformed(java.awt.event.ActionEvent evt) {
botao = "1";
getNum();
}
private void botao_2ActionPerformed(java.awt.event.ActionEvent evt) {
botao = "2";
getNum();
}
private void botao_3ActionPerformed(java.awt.event.ActionEvent evt) {
botao = "3";
getNum();
}
private void botao_4ActionPerformed(java.awt.event.ActionEvent evt) {
botao = "4";
getNum();
}
private void botao_5ActionPerformed(java.awt.event.ActionEvent evt) {
botao = "5";
getNum();
}
private void botao_6ActionPerformed(java.awt.event.ActionEvent evt) {
botao = "6";
getNum();
}
private void botao_7ActionPerformed(java.awt.event.ActionEvent evt) {
botao = "7";
getNum();
}
private void botao_8ActionPerformed(java.awt.event.ActionEvent evt) {
botao = "8";
getNum();
}
private void botao_9ActionPerformed(java.awt.event.ActionEvent evt) {
botao = "9";
getNum();
}
private void botao_comaActionPerformed(java.awt.event.ActionEvent evt) {
botao = ".";
getNum();
}
private void botao_somarActionPerformed(java.awt.event.ActionEvent evt) {
operacao = "+";
getNum1(operacao);
//setOperation(operacao);
}
private void botao_subtrairActionPerformed(java.awt.event.ActionEvent evt) {
operacao = "-";
getNum1(operacao);
//setOperation(operacao);
}
private void botao_multiplicarActionPerformed(java.awt.event.ActionEvent evt) {
operacao = "*";
getNum1(operacao);
//setOperation(operacao);
}
private void botao_dividirActionPerformed(java.awt.event.ActionEvent evt) {
operacao = "/";
getNum1(operacao);
//setOperation(operacao);
}
private void botao_igualActionPerformed(java.awt.event.ActionEvent evt) {
//showResult();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Calculadora().setVisible(true);
}
});
}
public void getNum()
{
num = num+botao;
setDisplay();
}
public void setDisplay()
{
tf_display.setText(num);
}
//Aqui ele faz a operação assim que o botão é pressionado, o que está errado.
public void getNum1(String operacao)
{
//num1 = (Double.parseDouble(tf_display.getText()));
if (operacao.equals("+"))
{
num1+= Double.parseDouble(tf_display.getText());
}
else
{
if (operacao.equals("-"))
{
num1-= Double.parseDouble(tf_display.getText());
}
else
{
if (operacao.equals("*"))
{
num1*= Double.parseDouble(tf_display.getText());
}
else
{
if (operacao.equals("/"))
{
num1/= Double.parseDouble(tf_display.getText());
}
}
}
}
setOperation(operacao);
}
public void setOperation(String operacao)
{
//num1= Double.parseDouble(tf_display.getText());
if (operacao.equals("+"))
{
tf_display2.setText(String.valueOf(num1 + " +"));
}
else
{
if (operacao.equals("-"))
{
tf_display2.setText(String.valueOf(num1 + " -"));
}
else
{
if (operacao.equals("*"))
{
tf_display2.setText(String.valueOf(num1 + " *"));
}
else
{
if (operacao.equals("/"))
{
tf_display2.setText(String.valueOf(num1 + " /"));
}
}
}
}
cleanDisplay();
}
public void cleanDisplay()
{
num = "";
tf_display.setText("");
}
//public void showResult()
// {
// num1+=Double.parseDouble(tf_display.getText());
// tf_display.setText(String.valueOf(num1));
//}
// Variables declaration - do not modify
private javax.swing.JButton botao_0;
private javax.swing.JButton botao_1;
private javax.swing.JButton botao_2;
private javax.swing.JButton botao_3;
private javax.swing.JButton botao_4;
private javax.swing.JButton botao_5;
private javax.swing.JButton botao_6;
private javax.swing.JButton botao_7;
private javax.swing.JButton botao_8;
private javax.swing.JButton botao_9;
private javax.swing.JButton botao_coma;
private javax.swing.JButton botao_dividir;
private javax.swing.JButton botao_igual;
private javax.swing.JButton botao_multiplicar;
private javax.swing.JButton botao_porcentagem;
private javax.swing.JButton botao_somar;
private javax.swing.JButton botao_subtrair;
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton21;
private javax.swing.JPanel jPanel1;
private javax.swing.JTextField tf_display;
private javax.swing.JTextField tf_display2;
// End of variables declaration
}
Talvez eu não tenha me expressado direito, e se for o caso, favor avisar.