2016-04-16 2 views
1

Ich bin ein Anfänger und versuche, einen einfachen Rechner zu machen. Ich habe für andere Antworten gesucht, aber mein Problem ist, dass nach dem Bediener drückt es ist nur die erste Saite hält nurIch habe Probleme, Operationen in Gang zu setzen

public class CalculatorFrame extends JFrame { 

    public CalculatorFrame(){ 
     this.setTitle("Calculator"); 
     this.setLayout(new BorderLayout(2,2)); 

     MenuBar menuBar = new MenuBar(); 

     JTextArea txtArea = new JTextArea(); 
     txtArea.setEditable(false); 
     txtArea.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
     txtArea.setText("0"); 
     txtArea.setFont(new Font("Sans Serif", Font.PLAIN,30)); 

     JPanel panel = new JPanel(); 
     panel.setLayout(new GridLayout(4,3,2,2)); 

     JPanel panel2 = new JPanel(); 
     panel2.setLayout(new GridLayout(6,1,2,2)); 

     MyActionListener al = new MyActionListener(txtArea); 
     MyOperatorListener ol = new MyOperatorListener(txtArea); 

     JButton btn = new JButton(); 
     int k=10; 
     for (int i=0; i<3; i++) { 
      k=k-3; 
      for (int j=0; j<3; j++) { 
       btn = new JButton(Integer.toString(k++)); 
       btn.setPreferredSize(new Dimension(70, 60)); 
       btn.setBackground(new Color(224,224,224)); 
       btn.setBorder(BorderFactory.createRaisedSoftBevelBorder()); 
       btn.setFont(new Font("Sans Serif", Font.BOLD,20)); 
       btn.addActionListener(al); 
       panel.add(btn); 
      } 
      k=k-3; 
     } 

     JButton btn7 = new JButton("0"); 
     btn7.addActionListener(al); 
     btn7.setBackground(new Color(224,224,224)); 
     btn7.setPreferredSize(new Dimension(70, 60)); 
     btn7.setBorder (BorderFactory.createRaisedSoftBevelBorder()) ; 
     btn7.setFont(new Font("Sans Serif", Font.BOLD,20)); 

     JButton btn8 = new JButton("."); 
     btn8.addActionListener(al); 
     btn8.setBackground(new Color(224,224,224)); 
     btn8.setPreferredSize(new Dimension(70, 60)); 
     btn8.setBorder (BorderFactory.createRaisedSoftBevelBorder()) ; 
     btn8.setFont(new Font("Sans Serif", Font.BOLD,20)); 

     JButton btn9 = new JButton("="); 
     btn9.addActionListener(ol); 
     btn9.setBackground(new Color(0,128,255)); 
     btn9.setBorder (BorderFactory.createEtchedBorder()) ; 
     btn9.setPreferredSize(new Dimension(70, 60)); 
     btn9.setFont(new Font("Sans Serif", Font.BOLD,20)); 
     btn9.setToolTipText("calculate result"); 

     JButton btn1 = new JButton("CE"); 
     btn1.addActionListener(ol); 
     btn1.setBackground(new Color(160,160,160)); 
     btn1.setPreferredSize(new Dimension(50, 40)); 
     btn1.setFont(new Font("Sans Serif", Font.BOLD,12)); 
     btn1.setToolTipText("clear entry"); 

     JButton btn2 = new JButton("C"); 
     btn2.addActionListener(ol); 
     btn2.setBackground(new Color(160,160,160)); 
     btn2.setPreferredSize(new Dimension(50, 40)); 
     btn2.setFont(new Font("Sans Serif", Font.BOLD,15)); 
     btn2.setToolTipText("clear"); 

     JButton btn3 = new JButton("/"); 
     btn3.addActionListener(ol); 
     btn3.setBackground(new Color(160,160,160)); 
     btn3.setPreferredSize(new Dimension(50, 40)); 
     btn3.setFont(new Font("Sans Serif", Font.BOLD,15)); 
     btn3.setToolTipText("divide"); 

     JButton btn4 = new JButton("*"); 
     btn4.addActionListener(ol); 
     btn4.setBackground(new Color(160,160,160)); 
     btn4.setPreferredSize(new Dimension(50, 40)); 
     btn4.setFont(new Font("Sans Serif", Font.BOLD,15)); 
     btn4.setToolTipText("multiplie"); 

     JButton btn5 = new JButton("-"); 
     btn5.addActionListener(ol); 
     btn5.setBackground(new Color(160,160,160)); 
     btn5.setPreferredSize(new Dimension(50, 40)); 
     btn5.setFont(new Font("Sans Serif", Font.BOLD,15)); 
     btn5.setToolTipText("subtract"); 

     JButton btn6 = new JButton("+"); 
     btn6.addActionListener(ol); 
     btn6.setBackground(new Color(160,160,160)); 
     btn6.setPreferredSize(new Dimension(50, 40)); 
     btn6.setFont(new Font("Sans Serif", Font.BOLD,15)); 
     btn6.setToolTipText("add"); 

     this.add(txtArea, BorderLayout.NORTH); 
     this.add(panel,BorderLayout.CENTER); 
     this.add(panel2,BorderLayout.EAST); 

     panel.add(btn7); 
     panel.add(btn8); 
     panel.add(btn9); 
     panel2.add(btn1); 
     panel2.add(btn2); 
     panel2.add(btn3); 
     panel2.add(btn4); 
     panel2.add(btn5); 
     panel2.add(btn6); 


     this.setJMenuBar(menuBar); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     this.pack(); 
     this.setResizable(false); 
     this.setVisible(true); 
    } 
} 

public class MyActionListener implements ActionListener { 

    JTextArea area; 

    public MyActionListener(JTextArea area){ 
     this.area = area; 
    } 
    @Override 
    public void actionPerformed(ActionEvent e) { 

     JButton x = (JButton) e.getSource(); 
     String y = x.getText(); 
     String z = area.getText(); 
     int v = area.getText().length(); 
     int i = z.indexOf('.'); 
     if(i==1 && "0".equals(area.getText())){ 
      area.setText(""); 
     } 
     if(v<15){ 
      if(i>=0&&".".equals(y)){ 
       area.append(""); 
      }else{ 
       area.append(y); 
      } 
     }else{ 
      Toolkit.getDefaultToolkit().beep(); 
     } 
    }  
} 

public class MyOperatorListener implements ActionListener { 
    JTextArea area; 
    double total; 

    public MyOperatorListener(JTextArea area){ 
     this.area = area; 
    } 
    @Override 
    public void actionPerformed(ActionEvent e) { 

     JButton x = (JButton) e.getSource(); 
     String y = x.getText(); 
     double calc = Double.parseDouble(area.getText()); 

     switch(y){ 
      case "+": total = total + calc; 
       break; 
      case "-": total = total - calc; 
       break; 
      case "*": total = total * calc; 
       break; 
      case "/": if(calc!=0){ 
         total = total/calc; 
         } 
       break; 
      default: break; 
     } 
     switch(y){ 
      case "CE": calc = 0; 
         area.setText("0"); 
       break; 
      case "C": total = 0; 
         calc = 0; 
         area.setText("0"); 
       break; 
      case "=": area.setText(Double.toString(total)); 
       break; 
     } 
    } 
} 

Antwort

1

In Ihrem Betrieb Zuhörer wird die Gesamt nur initialisiert, wenn C gedrückt wird. Verwenden dieses Beispiels von 3 + 5:

  • Wenn 3 gedrückt wird, wird die Nummer in den Bereich eingegeben.
  • Wenn der + Betrieb gedrückt wird, wobei die Gesamt = 0 + 3. total = total + calc;
  • Wenn 5 eingegeben wird, wird die Nummer an das Ende des Bereichs angefügt. area.append(y);
  • Wenn der = Betrieb gedrückt wird, wird der Bereich auf die Gesamt eingestellt, die derzeit 3.

Die Summe wird nicht aktualisiert ist als Zahl eingegeben werden.

Idealerweise möchten Sie, dass die erste Nummer eingegeben und gespeichert wird (in der Summe). Wenn Sie dann die gewünschte Operation drücken, wird der Bereich gelöscht, damit die zweite Nummer eingegeben werden kann. Dann wertet die Gleichheitsoperation den gesamten Ausdruck aus, indem er sich erinnert, welche Operation zu verwenden ist.

  • Presse 3
  • Drücken Sie +. 3 wird in der Summe gespeichert und der Rechner merkt sich, dass die Operation + verwendet wird. Das Gebiet wird dann gelöscht.
  • Drücken Sie 5.
  • Drücken Sie =. Der Rechner führt dann total + 5 aus, weil er sich daran erinnert hat, dass die Operation + verwendet wird.
+0

Vielen Dank für die Antwort! Irgendwelche Vorschläge, wie man das macht? – DimiK

+0

Wenn ich einen Taschenrechner erstellt habe, habe ich Booleans für jede Operation verwendet. Wenn ein Wert eingegeben wurde, gefolgt von der Operation, würde die Operation wahr werden. Der zweite Wert wurde eingegeben und wenn equals gedrückt wird, findet er welche Operationen wahr sind und wendet sie an (wenn + ist wahr, dann total + Fläche) –

+0

Das hat sehr geholfen. Vielen Dank! – DimiK

Verwandte Themen