Java Taschenrechner GUI

Hannibal Smith

Jumbo Frame
Registriert
Apr. 2015
Beiträge
1.181
System.out.printLn("Hallo alles zusammen. Ich bins mal wieder");

Ich bin gerade dabei, einen Taschenrechner als GUI zu programmieren. Ich habe alles soweit zusammen, dass ich oben im Display die eingetippten zahlen und rechenoperatoren sehe (string) aber es berechnet noch nix. Nun hab ich mir gedacht, wenn ich beim JButton Ergebnis per "double.parseDouble(string)" den string in ein double umwandle rechnet er das aus ... wird wohl aber nicht gehen weil die Operatoren dabei stehen. Nun brauche ich eure Tipps, wie ich am besten den string berechnen kann. Punkt vor Strich ist erstmal unwichtig.


Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.Hashtable;
import java.awt.font.TextAttribute;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import Prog1Tools.IOTools;

/**
  *
  * Taschenrechner GUI
  *
  * @version 1.0 vom 18.01.2018
  * @author 
  */

public class TaschenrechnerGUI extends JFrame {
  // Anfang Attribute
  private JTextArea TextArea1 = new JTextArea("12");
  private JLabel lTaschenrechner = new JLabel();
  private JButton eins = new JButton();
  private JButton zwei = new JButton();
  private JButton drei = new JButton();
  private JButton vier = new JButton();
  private JButton fuenf = new JButton();
  private JButton sechs = new JButton();
  private JButton sieben = new JButton();
  private JButton acht = new JButton();
  private JButton neun = new JButton();
  private JButton mal = new JButton();
  private JButton plus = new JButton();
  private JButton minus = new JButton();
  private JButton durch = new JButton();
  private JButton gleich = new JButton();
  private JButton zero = new JButton();
  private JLabel Ausgabe = new JLabel();
  // Ende Attribute
  
  ScriptEngineManager mgr= new ScriptEngineManager();
    ScriptEngine engine= mgr.getEngineByName("JavaScript");
    String foo=("");
  
  public TaschenrechnerGUI() { 
    // Frame-Initialisierung
    super();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 310; 
    int frameHeight = 319;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("TaschenrechnerGUI");
    setResizable(true);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    
    lTaschenrechner.setBounds(32, 0, 227, 27);
    lTaschenrechner.setText("Taschenrechner");
    Hashtable<TextAttribute, Object> lTaschenrechner_map = new Hashtable<TextAttribute, Object>();
    lTaschenrechner_map.put(TextAttribute.FAMILY, "Arial Black");
    lTaschenrechner_map.put(TextAttribute.SIZE, 22);
    lTaschenrechner_map.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
    lTaschenrechner.setFont(new Font(lTaschenrechner_map));
    lTaschenrechner.setForeground(Color.BLACK);
    lTaschenrechner.setOpaque(false);
    lTaschenrechner.setHorizontalAlignment(SwingConstants.CENTER);
    lTaschenrechner.setHorizontalTextPosition(SwingConstants.CENTER);
    cp.add(lTaschenrechner);
    eins.setBounds(8, 160, 33, 33);
    eins.setText("1");
    eins.setMargin(new Insets(2, 2, 2, 2));
    eins.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        eins_ActionPerformed(evt);
      }
    });
    cp.add(eins);
    zwei.setBounds(48, 160, 33, 33);
    zwei.setText("2");
    zwei.setMargin(new Insets(2, 2, 2, 2));
    zwei.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        zwei_ActionPerformed(evt);
      }
    });
    cp.add(zwei);
    drei.setBounds(88, 160, 33, 33);
    drei.setText("3");
    drei.setMargin(new Insets(2, 2, 2, 2));
    drei.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        drei_ActionPerformed(evt);
      }
    });
    cp.add(drei);
    vier.setBounds(8, 200, 33, 33);
    vier.setText("4");
    vier.setMargin(new Insets(2, 2, 2, 2));
    vier.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        vier_ActionPerformed(evt);
      }
    });
    cp.add(vier);
    fuenf.setBounds(48, 200, 33, 33);
    fuenf.setText("5");
    fuenf.setMargin(new Insets(2, 2, 2, 2));
    fuenf.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        fuenf_ActionPerformed(evt);
      }
    });
    cp.add(fuenf);
    sechs.setBounds(88, 200, 33, 33);
    sechs.setText("6");
    sechs.setMargin(new Insets(2, 2, 2, 2));
    sechs.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        sechs_ActionPerformed(evt);
      }
    });
    cp.add(sechs);
    sieben.setBounds(8, 240, 33, 33);
    sieben.setText("7");
    sieben.setMargin(new Insets(2, 2, 2, 2));
    sieben.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        sieben_ActionPerformed(evt);
      }
    });
    cp.add(sieben);
    acht.setBounds(48, 240, 33, 33);
    acht.setText("8");
    acht.setMargin(new Insets(2, 2, 2, 2));
    acht.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        acht_ActionPerformed(evt);
      }
    });
    cp.add(acht);
    neun.setBounds(88, 240, 33, 33);
    neun.setText("9");
    neun.setMargin(new Insets(2, 2, 2, 2));
    neun.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        neun_ActionPerformed(evt);
      }
    });
    cp.add(neun);
    mal.setBounds(136, 160, 33, 33);
    mal.setText("X");
    mal.setMargin(new Insets(2, 2, 2, 2));
    mal.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        mal_ActionPerformed(evt);
      }
    });
    cp.add(mal);
    plus.setBounds(136, 200, 33, 33);
    plus.setText("+");
    plus.setMargin(new Insets(2, 2, 2, 2));
    plus.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        plus_ActionPerformed(evt);
      }
    });
    cp.add(plus);
    minus.setBounds(136, 240, 33, 33);
    minus.setText("-");
    minus.setMargin(new Insets(2, 2, 2, 2));
    minus.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        minus_ActionPerformed(evt);
      }
    });
    cp.add(minus);
    durch.setBounds(136, 120, 33, 33);
    durch.setText("/");
    durch.setMargin(new Insets(2, 2, 2, 2));
    durch.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        durch_ActionPerformed(evt);
      }
    });
    cp.add(durch);
    gleich.setBounds(48, 120, 73, 33);
    gleich.setText("=");
    gleich.setMargin(new Insets(2, 2, 2, 2));
    gleich.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        gleich_ActionPerformed(evt);
      }
    });
    gleich.setForeground(Color.BLACK);
    gleich.setBackground(Color.WHITE);
    cp.add(gleich);
    zero.setBounds(8, 120, 33, 33);
    zero.setText("0");
    zero.setMargin(new Insets(2, 2, 2, 2));
    zero.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        zero_ActionPerformed(evt);
      }
    });
    zero.setForeground(Color.BLACK);
    cp.add(zero);
    Ausgabe.setBounds(8, 40, 291, 65);
    Ausgabe.setText("");
    Ausgabe.setForeground(Color.BLACK);
    Ausgabe.setFont(new Font("Arial", Font.BOLD, 28));
    cp.add(Ausgabe);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public TaschenrechnerGUI
  
  // Anfang Methoden
  
  
  public static void main(String[] args) {
    try{
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());               // Windows Theme
    } catch(Exception e) {
    }
    new TaschenrechnerGUI();
    
    //ScriptEngineManager mgr= new ScriptEngineManager();
    //ScriptEngine engine= mgr.getEngineByName("JavaScript");
    //String foo=("0");
    //System.out.println(engine.eval(foo));
  } // end of main
  
  public void eins_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("1");
    Ausgabe.setText(foo);
  } // end of eins_ActionPerformed

  public void zwei_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("2");
    Ausgabe.setText(foo);
    
  } // end of zwei_ActionPerformed

  public void drei_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("3");
    Ausgabe.setText(foo);
    
  } // end of drei_ActionPerformed

  public void vier_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("4");
    Ausgabe.setText(foo);
    
  } // end of vier_ActionPerformed

  public void fuenf_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("5");
    Ausgabe.setText(foo);
    
  } // end of fuenf_ActionPerformed

  public void sechs_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("6");
    Ausgabe.setText(foo);
    
  } // end of sechs_ActionPerformed

  public void sieben_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("7");
    Ausgabe.setText(foo);
    
  } // end of sieben_ActionPerformed

  public void acht_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("8");
    Ausgabe.setText(foo);
    
  } // end of acht_ActionPerformed

  public void neun_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("9");
    Ausgabe.setText(foo);
    
  } // end of neun_ActionPerformed

  public void mal_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("*");
    Ausgabe.setText(foo);
    
  } // end of mal_ActionPerformed

  public void plus_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("+");
    Ausgabe.setText(foo);
    
  } // end of plus_ActionPerformed

  public void minus_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("-");
    Ausgabe.setText(foo);
    
  } // end of minus_ActionPerformed

  public void durch_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("/");
    Ausgabe.setText(foo);
    
  } // end of durch_ActionPerformed

  public void gleich_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("=");
    Ausgabe.setText(foo);
    
    double Ergebnis= Double.parseDouble(foo);
    Ausgabe.setText(Ergebnis);
    
  } // end of gleich_ActionPerformed

  public void zero_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("0");
    Ausgabe.setText(foo);
    
  } // end of zero_ActionPerformed

  // Ende Methoden
} // end of class TaschenrechnerGUI

Mir spuckt er dann aus :

Compiliere "C:\Users\Johannes\Desktop\Johannes\Schule\(LF 6) Programmieren\Java Selbstlernen\TaschenrechnerGUI.java" mit Java-Compiler
TaschenrechnerGUI.java:321:21: error: incompatible types: double cannot be converted to String
Ausgabe.setText(Ergebnis);
^
Note: Some messages have been simplified; recompile with -Xdiags:verbose to get full output
1 error
 
Die Methode setText erwartet einen String, du gibst ihm aber einen double. Den double musst du in einen String konvertieren: Ausgabe.setText(String.valueOf(Ergebnis));

Des weiteren solltest du dir angewöhnen variablen mit kleinem Buchstaben zu benennen. Zum Beispiel

double Ergebnis= Double.parseDouble(foo); in double ergebnis= Double.parseDouble(foo);

ändern.
 
ist geändert und er öffnet auch das gui aber wenn ich = drücke passiert nichts

Meldung die unten bei den Fehlermeldungen kommt :



Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "12*2="
at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054)
at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.base/java.lang.Double.parseDouble(Double.java:543)
at TaschenrechnerGUI.gleich_ActionPerformed(TaschenrechnerGUI.java:320)
at TaschenrechnerGUI$14.actionPerformed(TaschenrechnerGUI.java:197)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:269)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6578)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3343)
at java.desktop/java.awt.Component.processEvent(Component.java:6343)
at java.desktop/java.awt.Container.processEvent(Container.java:2259)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4961)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2317)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4793)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4539)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4480)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2303)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2758)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4793)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
at java.desktop/java.awt.EventQueue.access$500(EventQueue.java:97)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:717)
at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:711)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:89)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:99)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:739)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:737)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:89)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:199)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
 
Zuletzt bearbeitet:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "12*2="

Du hast einen String 12*2= und daraus versucht er einen double zu machen. Das geht niht weil er nicht weiß was er mit * und = machen soll. Du musst den String splitten und die einzelnen Bestandteile einzeln in Zahlen kippen, mit denen du dann arbeiten kannst.

Google mal nach String splitten oder String aufteilen.
 
Generell würde ich empfehlen, das Projekt in eine Fachklasse, die nichts ausgibt, und eine GUI-Klasse, die nicht rechnet, zu teilen. Das ist übersichtlicher, und wenn beide Klassen machen, was sie sollen, kannst du sie zusammen nutzen.

Gruß Jens
 
wie meinst du das ? Wenn ich im Java Editor nen JButton o.ä anlege dann macht das den Qullcode davon automatisch ...
 
Er meint das du eine Klasse für Logik und eine Klasse für die GUI machen sollst. Das macht man in der Programmierung häufig, nennt sich (etwas erweitert) MVC oder Model View Control-Patern. Ist aus meiner Sicht für den Anfang noch nicht nötig, kann man aber machen. Wenn du darüber mehr wissen willst, ist das auch ein gutes Google-Stichwort.

Das was du geschrieben hast klingt als ob du einen Editor verwendest mti dem du grafisch die Oberfläche zusammen baust. Das ist möglich, aber dann solltest du versuchen den Quellcode zu verstehen so dass du hinterher in der Lage bist den Code auch händisch zu schreiben.
 
Beim Java Editor drücke ich auf JButton und dann erstellt er den Code dafür, welche ich nur noch befüllen muss.

Habs jetzt aufgesplittet nur die Frage wie ich jetzt weiter mache ... ich mein das zersplittete muss ja auch mit den richtigen (rausgesplitteten) operatoren wieder berechnet werden.

Code:
public void gleich_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("=");
    Ausgabe.setText(foo);
    
    String[] parts = foo.split("+"); foo.split("-"); foo.split("*"); foo.split("/"); foo.split("=");
    String part1 = parts[0];
    String part2 = parts[1];
    String part3 = parts[2];
    String part4 = parts[3];
    String part5 = parts[4];
    //double ergebnis= Double.parseDouble(foo);
    //Ausgabe.setText(String.valueOf(ergebnis));
    
  } // end of gleich_ActionPerformed
 
Du musst dir einen Algorithmus überlegen mit dem du das berechnest. z.B. gehst du durch dein Array mit einer Schleife durch. Du weißt das immer Abwechselnd eine Zahl kommt und dann ein Rechenzeichen. Folglich castest du jedes zweite Element in einen Double. Dann ließt du aus jedem zweiten+1 Element den operator raus. Dann kannst du sie ganz normal zusammen addieren.
 
Okay das überfordert mich jetzt ein wenig ...

Du meinst das so :

part0 = zahl -> ab in den double
part1 = operator -> ab in den double ?

oder steh ich auf dem schlauch ?
 
Ich meine das so
part0 = zahl -> ab in double0
part2 = zahl -> ab in double1
part4 = zahl -> ab in double2
usw.

part1 = operator -> mit einem Stringvergleich rausfinden welcher (+, -, * oder /) -> rechenoperation mit double0 und double1 ausführen und in doubleErgebnis speichern
part3 = operator -> rausfinden welcher und mit doubleErgebnis und double2 ausführen und in doubleErgebnis speicehrn

usw.

Wenn dud amit probleme hast es direkt in einer Schleife zu mcahen, mach es erstmal für einfach nur für zwei zahlen und einen Operanden. Umbauen in eine generische Lösung kannst du es immer noch.

Nimm dir auch die Zeit meine Antwort mehrfach zu lesen wenn du sie nicht verstehst.

Edit: Ich sehe gerade das du einen Split noch verfeinern musst. Lass dir mal die Inhalte von deinem parts -Array auf der Console ausgeben ;)
 
Danke für die Hilfe ich probiers mal aus :)
Ich geb mein bestes aber es ist wohl niemand mit Quellcode im Hirn geboren worden
 
Lass dich nicht entmutigen! Mach weiter, irgendwann platzt der Knoten und du erkennst das alles einfacher ist als du gedacht hast. Du arbeitest dich in ein Umfeld ein, dass den meisten Menschen auf diesem Planeten für immer ein Rätsel sein wird. Es gibt einen Grund warum Entwickler gut bezahlt werden und Softwareentwicklung teuer ist. Ich find es toll das du dich damit beschäftigst! Weiter so :)
 
Hab das gesplittete jetzt wieder mit If-Schleifen zusammen gerechnet nur gibt er mir nix aus wenn ich "=" drücke ... :(
Code:
  public void gleich_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("=");
    Ausgabe.setText(foo);
    
    String[] parts = foo.split("+"); foo.split("-"); foo.split("*"); foo.split("/"); foo.split("=");
    String part1 = parts[0];
    String part2 = parts[1];
    String part3 = parts[2];
    String part4 = parts[3];
    String part5 = parts[4];
    
    double wert0, wert1, wert2, ergebnis= 0;
    wert0= Double.parseDouble(parts[0]);
    wert1= Double.parseDouble(parts[2]);
    
    if (parts[1].equals("+")) {
      ergebnis= wert0+wert1;
    } // end of if
    
    if (parts[1].equals("-")) {
      ergebnis= wert0-wert1;
    } // end of if
    
    if (parts[1].equals("*")) {
      ergebnis= wert0*wert1;
    } // end of if
    
    if (parts[1].equals("/")) {
      ergebnis= wert0/wert1;
    } // end of if
    
    Ausgabe.setText(String.valueOf(ergebnis));
    //double ergebnis= Double.parseDouble(foo);
    //Ausgabe.setText(String.valueOf(ergebnis));
    
  } // end of gleich_ActionPerformed

und hier nochmal der ganze Code:
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.Hashtable;
import java.awt.font.TextAttribute;
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
import Prog1Tools.IOTools;

/**
  *
  * Taschenrechner GUI
  *
  * @version 1.0 vom 18.01.2018
  * @author 
  */

public class TaschenrechnerGUI extends JFrame {
  // Anfang Attribute
  private JTextArea TextArea1 = new JTextArea("12");
  private JLabel lTaschenrechner = new JLabel();
  private JButton eins = new JButton();
  private JButton zwei = new JButton();
  private JButton drei = new JButton();
  private JButton vier = new JButton();
  private JButton fuenf = new JButton();
  private JButton sechs = new JButton();
  private JButton sieben = new JButton();
  private JButton acht = new JButton();
  private JButton neun = new JButton();
  private JButton mal = new JButton();
  private JButton plus = new JButton();
  private JButton minus = new JButton();
  private JButton durch = new JButton();
  private JButton gleich = new JButton();
  private JButton zero = new JButton();
  private JLabel Ausgabe = new JLabel();
  // Ende Attribute
  
  ScriptEngineManager mgr= new ScriptEngineManager();
    ScriptEngine engine= mgr.getEngineByName("JavaScript");
    String foo=("");
  
  public TaschenrechnerGUI() { 
    // Frame-Initialisierung
    super();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 279; 
    int frameHeight = 319;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("TaschenrechnerGUI");
    setResizable(true);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    
    lTaschenrechner.setBounds(32, 0, 227, 27);
    lTaschenrechner.setText("Taschenrechner");
    Hashtable<TextAttribute, Object> lTaschenrechner_map = new Hashtable<TextAttribute, Object>();
    lTaschenrechner_map.put(TextAttribute.FAMILY, "Arial Black");
    lTaschenrechner_map.put(TextAttribute.SIZE, 22);
    lTaschenrechner_map.put(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
    lTaschenrechner.setFont(new Font(lTaschenrechner_map));
    lTaschenrechner.setForeground(Color.BLACK);
    lTaschenrechner.setOpaque(false);
    lTaschenrechner.setHorizontalAlignment(SwingConstants.CENTER);
    lTaschenrechner.setHorizontalTextPosition(SwingConstants.CENTER);
    cp.add(lTaschenrechner);
    eins.setBounds(8, 160, 33, 33);
    eins.setText("1");
    eins.setMargin(new Insets(2, 2, 2, 2));
    eins.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        eins_ActionPerformed(evt);
      }
    });
    cp.add(eins);
    zwei.setBounds(48, 160, 33, 33);
    zwei.setText("2");
    zwei.setMargin(new Insets(2, 2, 2, 2));
    zwei.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        zwei_ActionPerformed(evt);
      }
    });
    cp.add(zwei);
    drei.setBounds(88, 160, 33, 33);
    drei.setText("3");
    drei.setMargin(new Insets(2, 2, 2, 2));
    drei.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        drei_ActionPerformed(evt);
      }
    });
    cp.add(drei);
    vier.setBounds(8, 200, 33, 33);
    vier.setText("4");
    vier.setMargin(new Insets(2, 2, 2, 2));
    vier.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        vier_ActionPerformed(evt);
      }
    });
    cp.add(vier);
    fuenf.setBounds(48, 200, 33, 33);
    fuenf.setText("5");
    fuenf.setMargin(new Insets(2, 2, 2, 2));
    fuenf.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        fuenf_ActionPerformed(evt);
      }
    });
    cp.add(fuenf);
    sechs.setBounds(88, 200, 33, 33);
    sechs.setText("6");
    sechs.setMargin(new Insets(2, 2, 2, 2));
    sechs.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        sechs_ActionPerformed(evt);
      }
    });
    cp.add(sechs);
    sieben.setBounds(8, 240, 33, 33);
    sieben.setText("7");
    sieben.setMargin(new Insets(2, 2, 2, 2));
    sieben.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        sieben_ActionPerformed(evt);
      }
    });
    cp.add(sieben);
    acht.setBounds(48, 240, 33, 33);
    acht.setText("8");
    acht.setMargin(new Insets(2, 2, 2, 2));
    acht.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        acht_ActionPerformed(evt);
      }
    });
    cp.add(acht);
    neun.setBounds(88, 240, 33, 33);
    neun.setText("9");
    neun.setMargin(new Insets(2, 2, 2, 2));
    neun.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        neun_ActionPerformed(evt);
      }
    });
    cp.add(neun);
    mal.setBounds(136, 160, 33, 33);
    mal.setText("X");
    mal.setMargin(new Insets(2, 2, 2, 2));
    mal.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        mal_ActionPerformed(evt);
      }
    });
    cp.add(mal);
    plus.setBounds(136, 200, 33, 33);
    plus.setText("+;");
    plus.setMargin(new Insets(2, 2, 2, 2));
    plus.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        plus_ActionPerformed(evt);
      }
    });
    cp.add(plus);
    minus.setBounds(136, 240, 33, 33);
    minus.setText("-");
    minus.setMargin(new Insets(2, 2, 2, 2));
    minus.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        minus_ActionPerformed(evt);
      }
    });
    cp.add(minus);
    durch.setBounds(136, 120, 33, 33);
    durch.setText("/");
    durch.setMargin(new Insets(2, 2, 2, 2));
    durch.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        durch_ActionPerformed(evt);
      }
    });
    cp.add(durch);
    gleich.setBounds(48, 120, 73, 33);
    gleich.setText("=");
    gleich.setMargin(new Insets(2, 2, 2, 2));
    gleich.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        gleich_ActionPerformed(evt);
      }
    });
    gleich.setForeground(Color.BLACK);
    gleich.setBackground(Color.WHITE);
    cp.add(gleich);
    zero.setBounds(8, 120, 33, 33);
    zero.setText("0");
    zero.setMargin(new Insets(2, 2, 2, 2));
    zero.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        zero_ActionPerformed(evt);
      }
    });
    zero.setForeground(Color.BLACK);
    cp.add(zero);
    Ausgabe.setBounds(8, 40, 299, 65);
    Ausgabe.setText("");
    Ausgabe.setForeground(Color.BLACK);
    Ausgabe.setFont(new Font("Arial", Font.BOLD, 28));
    cp.add(Ausgabe);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public TaschenrechnerGUI
  
  // Anfang Methoden
  
  
  public static void main(String[] args) {
    try{
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());               // Windows Theme
    } catch(Exception e) {
    }
    new TaschenrechnerGUI();
    
    //ScriptEngineManager mgr= new ScriptEngineManager();
    //ScriptEngine engine= mgr.getEngineByName("JavaScript");
    //String foo=("0");
    //System.out.println(engine.eval(foo));
  } // end of main
  
  public void eins_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("1");
    Ausgabe.setText(foo);
  } // end of eins_ActionPerformed

  public void zwei_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("2");
    Ausgabe.setText(foo);
    
  } // end of zwei_ActionPerformed

  public void drei_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("3");
    Ausgabe.setText(foo);
    
  } // end of drei_ActionPerformed

  public void vier_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("4");
    Ausgabe.setText(foo);
    
  } // end of vier_ActionPerformed

  public void fuenf_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("5");
    Ausgabe.setText(foo);
    
  } // end of fuenf_ActionPerformed

  public void sechs_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("6");
    Ausgabe.setText(foo);
    
  } // end of sechs_ActionPerformed

  public void sieben_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("7");
    Ausgabe.setText(foo);
    
  } // end of sieben_ActionPerformed

  public void acht_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("8");
    Ausgabe.setText(foo);
    
  } // end of acht_ActionPerformed

  public void neun_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("9");
    Ausgabe.setText(foo);
    
  } // end of neun_ActionPerformed

  public void mal_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("*");
    Ausgabe.setText(foo);
    
  } // end of mal_ActionPerformed

  public void plus_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("+");
    Ausgabe.setText(foo);
    
  } // end of plus_ActionPerformed

  public void minus_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("-");
    Ausgabe.setText(foo);
    
  } // end of minus_ActionPerformed

  public void durch_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("/");
    Ausgabe.setText(foo);
    
  } // end of durch_ActionPerformed

  public void gleich_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("=");
    Ausgabe.setText(foo);
    
    String[] parts = foo.split("+"); foo.split("-"); foo.split("*"); foo.split("/"); foo.split("=");
    String part1 = parts[0];
    String part2 = parts[1];
    String part3 = parts[2];
    String part4 = parts[3];
    String part5 = parts[4];
    
    double wert0, wert1, wert2, ergebnis= 0;
    wert0= Double.parseDouble(parts[0]);
    wert1= Double.parseDouble(parts[2]);
    
    if (parts[1].equals("+")) {
      ergebnis= wert0+wert1;
    } // end of if
    
    if (parts[1].equals("-")) {
      ergebnis= wert0-wert1;
    } // end of if
    
    if (parts[1].equals("*")) {
      ergebnis= wert0*wert1;
    } // end of if
    
    if (parts[1].equals("/")) {
      ergebnis= wert0/wert1;
    } // end of if
    
    Ausgabe.setText(String.valueOf(ergebnis));
    //double ergebnis= Double.parseDouble(foo);
    //Ausgabe.setText(String.valueOf(ergebnis));
    
  } // end of gleich_ActionPerformed

  public void zero_ActionPerformed(ActionEvent evt) {
    foo = foo.concat("0");
    Ausgabe.setText(foo);
    
  } // end of zero_ActionPerformed

  // Ende Methoden
} // end of class TaschenrechnerGUI
 
Zuletzt bearbeitet:
Mach mal vor deinem Ausgabe.setText(String.valueOf(ergebnis)); ein Sysout mit ergebnis. Dann kannst du schon mal sehen ob die addition richtig gelaufen ist. Wenn das der Fall ist, kannst du davon ausgehen das es sich um ein Gui Problem handelt, evtl. muss da etwas aktualisiert werden. Kenne mich mit awt aber nicht aus, schau mal ob du auf Ausgabe eine refresh Methode oder so hast.
 
Trotz sysout macht er mir keine cmd auf --> bekomme keine ausgabe

Exception in thread "AWT-EventQueue-0" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
 
Urm ne Konsole wirst du brauchen über kurz oder lang. Ich kenne deinen Editor nicht aber irgendwo muss der doch Ausgaben haben?

Bei dem awt Fehler kann ich dir nicht helfen. Versuch es zu googlen.
 
Normalesweise bekomm ich bei sysout auch ne konsole auf aber scheinbar nicht wenn ich JFrame programmiere ...

und den awt google ich wenn ich daheim bin ... danke für die Hilfe und die Motivation :) ich werd dahinter bleiben
Ergänzung ()

habs raus :D
Zitat:
String.split() method takes a regular expression as an argument. Character + has a special meaning in regular expressions.
You need to escape it.
 
Sehr gut =) Und damit hast du einen wichtigen Teil in der Programmierung gelernt: googlen, googlen, googlen. Nicht umsonst gibt es derartige comics:

BnvUvEiIgAAtMf4.png
 
Zurück
Oben