/*
 * "Grundkurs Programmieren in Java (7. Auflage, 2014)"
 * 2003-2014, Carl Hanser Verlag
 * Loesungsvorschlag zu Aufgabe 15.5 (Version 2.0)
 * (c) 2003-2014 D. Ratz, J. Scheffler, D. Seese, J. Wiesenberger
 *
 */

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class RechenFrame extends JFrame{
  
  private Container c;
  private JTextField operand1, operand2;
  private JButton    plus, minus, mal,  geteilt, loeschen;
  private JLabel     ergLabel;
  
  public RechenFrame() {
    c = getContentPane();
    c.setLayout(new GridLayout(0, 4) );
    
    c.add(new JLabel("Operand 1:", JLabel.RIGHT));
    operand1 = new JTextField(4);
    c.add(operand1);
    c.add(new JLabel("Operand 2:", JLabel.RIGHT));
    operand2 = new JTextField(4);
    c.add(operand2);
    
    c.add(plus = new JButton("Addieren"));
    plus.addActionListener(new OperatorListener('+'));
    
    c.add(minus = new JButton("Subtrahieren"));
    minus.addActionListener(new OperatorListener('-'));
    
    c.add(mal = new JButton("Multiplizieren") );
    mal.addActionListener(new OperatorListener('*'));
    
    c.add(geteilt = new JButton("Dividieren"));
    geteilt.addActionListener(new OperatorListener('/'));

    c.add(new JLabel("Ergebnis: ", JLabel.RIGHT));
  
    c.add(ergLabel = new JLabel(""));
    ergLabel.setOpaque(true);
    ergLabel.setBackground(Color.WHITE);

    c.add(loeschen = new JButton("Alles loeschen"));
    loeschen.addActionListener(new OperatorListener('l'));
  }
  
  // innere Klasse
  class OperatorListener implements ActionListener {
    char oper;
    OperatorListener(char oper) {
      this.oper = oper;
    }
    public void actionPerformed(ActionEvent e) {
      if (oper == 'l') {
        operand1.setText("");
        operand2.setText("");
        ergLabel.setText("");
        return;
      }
      try {
        double op1 = Double.valueOf(operand1.getText()).doubleValue();
        double op2 = Double.valueOf(operand2.getText()).doubleValue();
        double erg;
        if (oper == '+')
          erg = op1 + op2;
        else if (oper == '-')
          erg = op1 - op2;
        else if (oper == '*')
          erg = op1 * op2;
        else
          erg = op1 / op2;
        ergLabel.setText("" + erg);
      }
      catch (Exception ex) {
        ergLabel.setText("Unzulaessige Eingabe!");
      }
    }
  }
  
  // main-Methode
  public static void main(String[] args) {
    RechenFrame Rechenfenster = new RechenFrame();
    Rechenfenster.setTitle("RechenFrame");
    Rechenfenster.setSize(550,100);
    Rechenfenster.setVisible(true);
    Rechenfenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}
