2016-11-11 10 views
0

Ich mache einen Rechner für ein Projekt in der Schule und ich bekomme ein großes Problem. Der Rechner hat funktioniert und alle, aber dann habe ich eine Methode hinzugefügt, um das Rechnen zu vereinfachen und es mehr als zwei Zahlen akzeptieren zu lassen. Danach hörten meine Tasten auf zu arbeiten. Ich habe ein paar Dinge ausprobiert und weiß, dass der Code erreichbar ist. Es werden keine Fehler angezeigt.JTextField reagiert nicht auf JButtons

Problem: Zahlentasten weigern sich, Zahlen in JTextField zu drucken.

Code:

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.JTextField; 

public class Calculator extends JFrame implements ActionListener { 

    JLabel lbl1; 
    JTextField tf; 
    JButton b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, bAdd, bEqu, bSub, bMult, bDiv, bC, bBS, bDot; 
    static double a=0, b=0, c; 
    static int lastOperator = 0; // 1 = +, 2 = -, 3 = *, 4 = /. 

    // Display everything in the window 
    public Calculator() { 
     lbl1 = new JLabel(); tf = new JTextField(10);b0 = new JButton("0"); 
     b1 = new JButton("1"); b4 = new JButton("4"); b7 = new JButton("7"); 
     b2 = new JButton("2"); b5 = new JButton("5"); b8 = new JButton("8"); 
     b3 = new JButton("3"); b6 = new JButton("6"); b9 = new JButton("9"); 
     bAdd = new JButton("+"); bSub = new JButton("-"); bMult = new JButton("*"); bDot = new JButton("."); 
     bEqu = new JButton("="); bC = new JButton("C"); bBS = new JButton("CE");  bDiv = new JButton("/"); 

     tf.setBounds(30,40,350,30);  bBS.setBounds(40,100,50,100); bC.setBounds(40,220,50,100); 
     b7.setBounds(110,100,50,40); b8.setBounds(180,100,50,40); b9.setBounds(250,100,50,40); bDiv.setBounds(320,100,50,40); 
     b4.setBounds(110,160,50,40); b5.setBounds(180,160,50,40); b6.setBounds(250,160,50,40); bMult.setBounds(320,160,50,40); 
     b1.setBounds(110,220,50,40); b2.setBounds(180,220,50,40); b3.setBounds(250,220,50,40); bSub.setBounds(320,220,50,40); 
     bDot.setBounds(110,280,50,40); b0.setBounds(180,280,50,40); bEqu.setBounds(250,280,50,40); bAdd.setBounds(320,280,50,40); 

     add(tf); add(b7); add(b8); add(b9); add(b4); add(b5); add(b6); add(b1); add(b2); add(b3); add(b0); 
     add(bDot); add(bAdd); add(bSub); add(bMult); add(bDiv); add(bEqu); add(bC); add(bBS);  

     b0.addActionListener(this); b4.addActionListener(this); b8.addActionListener(this); 
     b1.addActionListener(this); b5.addActionListener(this); b9.addActionListener(this); 
     b2.addActionListener(this); b6.addActionListener(this); bAdd.addActionListener(this); 
     b3.addActionListener(this); b7.addActionListener(this); bEqu.addActionListener(this); 
     bSub.addActionListener(this); bMult.addActionListener(this); bC.addActionListener(this); 
     bBS.addActionListener(this); bDiv.addActionListener(this); bDiv.addActionListener(this); 
     bDot.addActionListener(this); 
    } 

    // Metod for calculating 
    public void operatorMethod(int lastOperator) { 
     if (lastOperator > 0) { 
      b = Double.parseDouble(tf.getText()); 
     } 

     switch (lastOperator) { 
     case 0: 
      a = Double.parseDouble(tf.getText()); 
      break; 
     case 1: 
      a = a +b; 
      break; 
     case 2: 
      a = a-b; 
      break; 
     case 3: 
      a = a * b; 
      break; 
     case 4: 
      a = a/b; 
      break; 
     default: 
      a = 0; 
      break; 
     } 
     tf.setText(""); 
    } 

    // Action Listener 
     public void actionPerformed(ActionEvent e) { 

      // Input 
      if (e.getSource() == b0) { 
       tf.setText(tf.getText().concat("0")); 
      } 
      if (e.getSource() == b1) { 
       tf.setText(tf.getText().concat("1")); 
      } 
      if (e.getSource() == b2) { 
       tf.setText(tf.getText().concat("2")); 
      } 
      if (e.getSource() == b3) { 
       tf.setText(tf.getText().concat("3")); 
      } 
      if (e.getSource() == b4) { 
       tf.setText(tf.getText().concat("4")); 
      } 
      if (e.getSource() == b5) { 
       tf.setText(tf.getText().concat("5")); 
      } 
      if (e.getSource() == b6) { 
       tf.setText(tf.getText().concat("6")); 
      } 
      if (e.getSource() == b7) { 
       tf.setText(tf.getText().concat("7")); 
      } 
      if (e.getSource() == b8) { 
       tf.setText(tf.getText().concat("8")); 
      } 
      if (e.getSource() == b9) { 
       tf.setText(tf.getText().concat("9")); 
      } 
      if (e.getSource() == bDot) { 
       tf.setText(tf.getText().concat(".")); 
      } 

     // Counting 
     // Add 
     if (e.getSource() == bAdd) { 
      operatorMethod(lastOperator); 
      lastOperator = 1; 
     } 

     // Subtract 
     if (e.getSource() == bSub) { 
      operatorMethod(lastOperator); 
      lastOperator = 2;  } 

     // Mutliply 
     if (e.getSource() == bMult); { 
      operatorMethod(lastOperator); 
      lastOperator = 3; 
     } 

     // Divide 
     if (e.getSource() == bDiv) { 
      operatorMethod(lastOperator); 
      lastOperator = 4; 
     } 

     // Different operations E.g =. 
     if (e.getSource() == bEqu) { 
      operatorMethod(lastOperator); 
      lastOperator = 0; 
      tf.setText("" + a); 
     } 

     if (e.getSource() == bBS) { 
      String s = tf.getText(); 
      tf.setText(""); 
      for (int i = 0; i < s.length()-1; i++) { 
       tf.setText(tf.getText()+s.charAt(i)); 
      } 
     } 
     if (e.getSource() == bC) { 
      tf.setText(""); 
     } 

    } 

    // Create window 
    public static void main(String[] args) { 
     Calculator f = new Calculator(); 
     f.setLayout(null); 
     f.setLocation(1100,300); 
     f.setTitle("Calculatoren!!!!"); 
     f.setVisible(true); 
     f.setSize(410,410); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setResizable(false); 
    } 
} 

Antwort

1

Es ist eine unnötige ; in dieser Zeile: if (e.getSource() == bMult); {.

Mit diesem zusätzlichen Charakter der if eine leere Anweisung und den folgenden Code-Block enthält ({ operatorMethod(lastOperator); lastOperator = 3; }) wird nach jedem Tastendruck ausgeführt und operatorMethod löscht immer den Inhalt des Textfeldes.

Entfernen Sie die ; und das Problem wird verschwinden.

+0

getestet mit dieser Antwort und es funktioniert jetzt ganz gut – XtremeBaumer