Probleme Action Listener Taschenrechner

bene98

Aktives Mitglied
Hallo,
Ich versuche gerade einen Gui-Taschenrechner zu erstellen.
ich möchte einen Actionlistener für eine beliebige taste hinzufügen.
Das Problem scheint mir an der "anweisung" static zu liegen.
Erstelle ich für einen der Buttons z.B. fünf.addActionListener(); einen solchen Listener, dann sagt Eclipse mir was über die Inkompatibilität zwischen
static und non-static. Könnte mir bitte jemand helfen, damit ich weiter machen kann.
Am liebsten würde ich es ungefähr so hinbekommen, mit der Unterscheidung von command und insert
Danke Benedikt

Java:
package guessagain2;

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
class calculator extends JFrame implements ActionListener {

    static JFrame f;
    static JTextField k;
 
    calculator()
    {
 
    }
 
    public static void main(String args[])
    {
    
        k = new JTextField(15);
    
        k.setBackground(Color.white);
        JPanel p = new JPanel();
        p.setLayout(new GridLayout(5, 3));
        f = new JFrame("calculator");
        f.setLayout(new FlowLayout());
        
    JButton C = new JButton ("C");
    JButton plus = new JButton("+");
    JButton minus = new JButton("-");
    JButton mal = new JButton("*");
    JButton geteilt = new JButton("/");
    JButton gleich = new JButton("=");
    JButton sieben =new JButton("7");
    JButton acht = new JButton ("8");
    JButton neun = new JButton ("9");
    JButton nichts = new JButton ("0");
    JButton sechs = new JButton ("6");
    JButton fünf = new JButton ("5");
    JButton vier = new JButton ("4");
    JButton drei = new JButton ("3");
    JButton zwei = new JButton ("2");
    JButton eins = new JButton ("1");

     p.add(C);
    p.add(nichts);
    p.add(geteilt);   
    p.add(mal);
    p.add(plus);
    p.add(sieben);
    p.add(acht);
    p.add(neun);
    p.add(minus);
    p.add(vier);
    p.add(fünf);
    p.add(sechs);
    p.add(gleich);
    p.add(eins);
    p.add(zwei);
    p.add(drei);
    
    
    
    p.validate();
    f.add(k);
  
    f.setVisible(true);
    p.setBackground(Color.white);
    f.setSize(350, 450);
    f.add(p);
    

    
    
    }}

 
Also mein Hinweise:
a) static ist nur die main - also entferne das static bei f und k.
b) Benenne alles ordentlich und nach Standard. Also Klassennamen fangen mit einem großen Buchstaben an und Variablen bekommen vernünftige Namen und nicht f und k.
c) Also entweder ist Calculator ein Frame oder es hat ein Frame. Aber beides ist relativ dubios. Wenn Calculator ein Fenster sein soll, dann benenne es so - dann ist es ja ein CalculatorWindow und kein Calculator.

Aber egal wie: in der main Methode wird dann nur eine neue Instanz von Calculator erzeugt und dann darauf Dinge aufgerufen. So es ein JFrame sein soll (und CalculatorWindow wird, bedeutet dies, dass Du nur in main in erster Linie haben wirst:
CalculatorWindow window = new CalculatorWindow();

Der Code, der die ganzen Dinge erzeugt, kommt dann in den Konstruktor. Aber ei JFrame musst Du nicht mehr erzeugen, das ist ja CalculatorWindow dann schon.
 
Hallo, Danke für die Antwort. Habe versucht, dier angesprochenen Aspekte zu ändern.
Problem ist, jetzt kompiliert die Sache nicht mehr. Den J Frame bauche ich nicht extra weil in der Klasse oben extends JFrame, richtig?

Java:
package guessagain2;



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

@SuppressWarnings("serial")
class CalculatorWindow extends JFrame implements ActionListener {

 
   public void calculatorWindow()
    { }
 
    public static void main(String args[])
    {
        
   CalculatorWindow window = new CalculatorWindow();     
    
    JButton C = new JButton ("C");
    JButton plus = new JButton("+");
    JButton minus = new JButton("-");
    JButton mal = new JButton("*");
    JButton geteilt = new JButton("/");
    JButton gleich = new JButton("=");
    JButton sieben =new JButton("7");
    JButton acht = new JButton ("8");
    JButton neun = new JButton ("9");
    JButton nichts = new JButton ("0");
    JButton sechs = new JButton ("6");
    JButton fünf = new JButton ("5");
    JButton vier = new JButton ("4");
    JButton drei = new JButton ("3");
    JButton zwei = new JButton ("2");
    JButton eins = new JButton ("1");

    window.add(C);
    window.add(nichts);
    window.add(geteilt);   
    window.add(mal);
    window.add(plus);
    window.add(sieben);
    window.add(acht);
    window.add(neun);
    window.add(minus);
    window.add(vier);
    window.add(fünf);
    window.add(sechs);
    window.add(gleich);
    window.add(eins);
    window.add(zwei);
    window.add(drei);
    
  
    
    
    }}
 
Ja, aber der Code mit den Buttons gehört nun in den Konstruktor von CalculateWindow. Und dann ist die Instanz natürlich this wobei das ‚this.‘ weggelassen werden kann.

Und bitte immer angeben, wieso etwas nicht übersetzt werden kann. Das ist auch immer eine gute Information.
 
Geht leider nicht. oder soll ich den Code mit den Buttons in die Runden Klammern vom Konstruktor eintragen?
auch dann sagt er aber z.B. dass ich this nicht im static context benutzen kann.
In Zeile zehn (Klassendefinition) wird Folgendes bemängelt
Multiple markers at this line
- The type CalculatorWindow is already defined
- The type CalculatorWindow must implement the inherited abstract method

Java:
ackage guessagain2;



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

@SuppressWarnings("serial")
class CalculatorWindow extends JFrame implements ActionListener {

 
   public void calculatorWindow()
    { }
 
    public static void main(String args[])
    {
        
   CalculatorWindow window = new CalculatorWindow();
   {
   JButton C = new JButton ("C");
   JButton plus = new JButton("+");
   JButton minus = new JButton("-");
   JButton mal = new JButton("*");
   JButton geteilt = new JButton("/");
   JButton gleich = new JButton("=");
   JButton sieben =new JButton("7");
   JButton acht = new JButton ("8");
   JButton neun = new JButton ("9");
   JButton nichts = new JButton ("0");
   JButton sechs = new JButton ("6");
   JButton fünf = new JButton ("5");
   JButton vier = new JButton ("4");
   JButton drei = new JButton ("3");
   JButton zwei = new JButton ("2");
   JButton eins = new JButton ("1");
   }
    
    this.add(C);
    this.add(nichts);
    this.add(geteilt);   
    this.add(mal);
    this.add(plus);
    this.add(sieben);
    window.add(acht);
    window.add(neun);
    window.add(minus);
    window.add(vier);
    window.add(fünf);
    window.add(sechs);
    window.add(gleich);
    window.add(eins);
    window.add(zwei);
    window.add(drei);
   }
  
    
    
    }}
 
A) ein Konstruktor muss genau so heißen wie die Klasse (Groß-/Kleinschreibung) und darf kein Rückgabetyp wie void haben. (Meckert aber der Compiler nicht an - so ist das eine normale Methode.)

B) Du hast da eine static void main Methode - der Code sollte aber doch in den Konstruktor.

C) Du musst dann auch keine weitere Instanz der Klasse erzeugen.

D) Du definierst die Variablen in einem Codeblock. Damit sind diese nur innerhalb des Blockes gültig. Somit ist die Variable C nicht mehr gültig, wenn du zu der add Methode kommst.

E) wenn du ein Interface nutzt, dann musst du auch die Methoden, die vorgegeben sind, implementieren. Das Interface ActionListener könntest Du erst einmal raus nehmen, bis Du dazu kommst.

F) Die Anzahl der { stimmte nicht mit der Anzahl der } überein ...

Also in etwa sowas:

Java:
package guessagain2;

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

@SuppressWarnings("serial")
class CalculatorWindow extends JFrame {
  public CalculatorWindow() {
   JButton C = new JButton ("C");
   JButton plus = new JButton("+");
   JButton minus = new JButton("-");
   JButton mal = new JButton("*");
   JButton geteilt = new JButton("/");
   JButton gleich = new JButton("=");
   JButton sieben =new JButton("7");
   JButton acht = new JButton ("8");
   JButton neun = new JButton ("9");
   JButton nichts = new JButton ("0");
   JButton sechs = new JButton ("6");
   JButton fünf = new JButton ("5");
   JButton vier = new JButton ("4");
   JButton drei = new JButton ("3");
   JButton zwei = new JButton ("2");
   JButton eins = new JButton ("1");
    this.add(C);
    this.add(nichts);
    this.add(geteilt);  
    this.add(mal);
    this.add(plus);
    this.add(sieben);
    this.add(acht);
    this.add(neun);
    this.add(minus);
    this.add(vier);
    this.add(fünf);
    this.add(sechs);
    this.add(gleich);
    this.add(eins);
    this.add(zwei);
    this.add(drei);   
    }
}

Aber das erklärt erst einmal nicht die erste Fehlermeldung meine ich. Hast du die Klasse evtl. zwei Mal oder so?
 
Hallo,
Ich versuche gerade einen Gui-Taschenrechner zu erstellen.
ich möchte einen Actionlistener für eine beliebige taste hinzufügen.
Du solltest den Code für Deine GUI unterteilen in:
CalculatorKeyboard: die Tastatur sie besitzt die Tasten und benachrichtigt den ActionListener falls eine Taste gedrückt wird.
CalculatorGUI: sie beinhaltet die Tastatur, das Display für die Eingabe und stellt den ActionListener.


Da Du viele Buttons benötigst, bietet sich für deren Erzeugung eine Schleife in Kombination mit einem Array an.
So vermeidest Du redundanten Code.
Es ist besser für die beiden Klassen nur JPanel als Elternklasse zu wählen, den JFrame separat zu erzeugen und die fertige ClaculatorGUI darin zu platzieren. Also nicht einen veränderten JFrame benutzen sondern Deinen angepassten JPanel in den JFrame einsetzen.

Das Ganze könnte man z.B. so lösen. 😉

Java:
import javax.swing.JFrame;

public class start {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Rechner");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new CalculatorGUI());
        frame.pack();
        frame.setResizable(false);
        frame.setVisible(true);
    }
}
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JPanel;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class CalculatorGUI extends JPanel implements ActionListener {
    JTextField display;

    public CalculatorGUI() {
        int gap = 5; // Luecke zwischen Tasten
        int keySize = 60; // Tastengrösse
        CalculatorKeyBoard keyBoard = new CalculatorKeyBoard(this, keySize, gap);
        display = new JTextField();
        display.setFont(keyBoard.getFont());
        display.setHorizontalAlignment(JTextField.RIGHT);
        Dimension dimKeyboard = keyBoard.getPreferredSize();
        setPreferredSize(new Dimension(dimKeyboard.width + gap, dimKeyboard.height + keySize + gap));
        display.setPreferredSize(new Dimension(dimKeyboard.width, keySize));
        display.setEditable(false);
        setLayout(new BorderLayout(gap, gap));
        add(display, BorderLayout.NORTH);
        add(keyBoard, BorderLayout.CENTER);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String cmd = e.getActionCommand();
        display.setText(cmd);
        repaint();
    }

}

Java:
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class CalculatorKeyBoard extends JPanel {
    private final static int ROWS = 4;
    private final static int COLUMNS = 4;
    private final static char[] keyNames = { 'C', '+', '-', '*', '/', '=', '7', '8', '9', '0', '6', '5', '4', '3', '2',
            '1' };

    public CalculatorKeyBoard(ActionListener listener, int keySize, int gap) {
        int width = (keySize + gap) * COLUMNS + gap;
        int height = (keySize + gap) * ROWS + gap;
        setPreferredSize(new Dimension(width, height));
        setLayout(new GridLayout(COLUMNS, ROWS, gap, gap));
        setFont(getFont().deriveFont(Font.BOLD, keySize / 2));
        JButton[] keys = new JButton[keyNames.length];
        for (int i = 0; i < keyNames.length; i++) {
            keys[i] = new JButton(keyNames[i] + "");
            keys[i].addActionListener(listener);
            keys[i].setFont(getFont());
            keys[i].setFocusable(false);
            add(keys[i]);
        }
    }
}
 
Forhes neues Jahr. Danke für die Tipps. Bei mir sieht es jetzt so aus wie in dem Post von Just Nobody.
Den letzten Post werde ich nutzen, um das Gerät zu verbessern. Ich wollte nur erst grundsätzlich verstehen, wie die Sachen funktionieren.
Ich habe jetzt keine Fehlermeldungen mehr (Ich hab die Klasse mal umbenannt. Allerdings wird mir auch überhaupt nichts angezeigt, wenn ich run drücke. Liegt dies dann wohl an der fehlenden main-Methode?


Java:
package guessagain2;



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

@SuppressWarnings("serial")
class CalculatorWindow2 extends JFrame{
    
   public CalculatorWindow2() {
       JButton C = new JButton ("C");
       JButton plus = new JButton("+");
       JButton minus = new JButton("-");
       JButton mal = new JButton("*");
       JButton geteilt = new JButton("/");
       JButton gleich = new JButton("=");
       JButton sieben =new JButton("7");
       JButton acht = new JButton ("8");
       JButton neun = new JButton ("9");
       JButton nichts = new JButton ("0");
       JButton sechs = new JButton ("6");
       JButton fünf = new JButton ("5");
       JButton vier = new JButton ("4");
       JButton drei = new JButton ("3");
       JButton zwei = new JButton ("2");
       JButton eins = new JButton ("1");
      
        add(C);
        add(nichts);
        add(geteilt);   
        add(mal);
        add(plus);
        add(sieben);
        add(acht);
        add(neun);
        add(minus);
        add(vier);
        add(fünf);
        add(sechs);
        add(gleich);
        add(eins);
        add(zwei);
        add(drei);   
     } }
 
Du hast doch eine Klasse start gehabt: Was hast Du da drinnen? Da ist doch deine main Methode. Also was machst Du da?
- Du erzeugst eine Instanz von CalculatorWindow2?
- Und machst Du es sichtbar?
 
Hallo, Ich verstehe noch nicht so richtig, wo das Problem ist.
Für eine Instanz von CalculatorWindow2 müsste ich ja folgendes machen, richtig.
CalculatorWindow2 meinTaschenrechner = new CalculatorWindow2;
Wie ich die sichtbar machen kann weiß ich aber nicht, das könnte ich nur bei frames z.B.
freundliche Grüße
 
Ja, die Instanz erzeugst Du wie angegeben - nur eben fehlen noch die ().
CalculatorWindow2 meinTaschenrechner = new CalculatorWindow2();

Und sichtbar machen kann man bei JFrames machen. Was bedeutet denn dieses extends bei einer Klasse? Was besagt dies denn?
 
Ich denke, dass es aussagt, dass es sich um eine Kindsklasse der Klasse JFrame handelt.
Deswegen müsste ich den JFrame noch sichtbar machen, richtig?
freundliche Grüße
 
Ja, das ist soweit richtig, was du gesagt hast. Diese Beziehung von einer Klasse zur Superklasse ist eine ‚Ist ein‘ Beziehung.

Also dein CalculatorWindow2 ist ein JFrame. Daher kannst du die Instanz vom CalculatorWindow2 genau so sichtbar machen wie ein JFrame.
 
Guten Tag,
Das Gerät kann mittlerweile bei Tastendruck das ensprechende Zeichen im Textfeld anzeigen. Der String wird immer ergänzt.
Was ich fragen wollte:
Kann ich den String nicht bei Drücken auf die Taste "gleich" einlesen, von der mathe-Funktion berechnen lassen und das Ergebnis ausgeben lassen? Würde mir viel Arbeit sparen.
Die Methode calculate unten funktioniert noch nicht.

Danke

Java:
package guessagain2;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

@SuppressWarnings("serial")
public class CalculatorWindow2 extends JFrame implements ActionListener {

JTextField display = new JTextField(17);   
JPanel panel = new JPanel();

JButton plus = new JButton ("+");
JButton minus = new JButton("-");
JButton mal = new JButton("*");
JButton geteilt = new JButton("/");
JButton sieben = new JButton("7");
JButton acht = new JButton("8");
JButton neun = new JButton("9");
JButton vier = new JButton("4");
JButton fünf = new JButton("5");
JButton sechs = new JButton("6");
JButton eins = new JButton("1");
JButton zwei = new JButton("2");
JButton drei = new JButton("3");
JButton nichts = new JButton("0");
JButton gleich = new JButton ("=");


    

public CalculatorWindow2 () {
setTitle("Mein Taschenrechner");
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);

add (display);
add (panel);
panel.setLayout(new GridLayout(5, 5));
panel.add (plus);
panel.add (minus);
panel.add (mal);
panel.add (sieben);
panel.add (acht);
panel.add (neun);
panel.add (vier);
panel.add (fünf);
panel.add (sechs);
panel.add (eins);
panel.add (zwei);
panel.add (drei);
panel.add (nichts);
panel.add (gleich);
panel.add (geteilt);


plus.addActionListener(this);
minus.addActionListener(this);
mal.addActionListener(this);
geteilt.addActionListener(this);
sieben.addActionListener(this);
acht.addActionListener(this);
neun.addActionListener(this);
vier.addActionListener(this);
fünf.addActionListener(this);
sechs.addActionListener(this);
eins.addActionListener(this);
zwei.addActionListener(this);
drei.addActionListener(this);
nichts.addActionListener(this);
gleich.addActionListener(this);

setSize(300,200);
setVisible(true);


}

@Override
public void actionPerformed(ActionEvent event) {
String input = event.getActionCommand();

 display.setText(display.getText() + input);}

public void calculate() {
 String ergebnis = display.getText();

}}
 
Da bin ich wieder🙂 Ich frage mich, ob ich den gesamten Inhalt des Textfeldes komplett auslesen kann (das wäre dann ja z.B 7*12=)
kann ich das so auslesen, aber ich krieg es nicht berechnet. was müsste ich dafür machen.
Oder kann man auch nen Scanner an das Textfeld anschließen und die ganze rechnereich dann wie bei einem Konsolen-Taschenrechner?
 
ich kann den auslesen, aber ich kann danach nix damit anfangen.
was kann ich den mit dem String machen, dass er berechnet und als double ausgegeben werden kann?
 
ich meine aber, dass ich noch einen Action Listener für das Gleich-Zeichen einbauen müsste.
So schmeisst der eigentlich alles durcheinander und verwirrt sich selbst.
Java:
package guessagain2;
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;

@SuppressWarnings("serial")
public class CalculatorWindow2 extends JFrame implements ActionListener {

JTextField display = new JTextField(17);   
JPanel panel = new JPanel();


JButton plus = new JButton ("+");
JButton minus = new JButton("-");
JButton mal = new JButton("*");
JButton geteilt = new JButton("/");
JButton sieben = new JButton("7");
JButton acht = new JButton("8");
JButton neun = new JButton("9");
JButton vier = new JButton("4");
JButton fünf = new JButton("5");
JButton sechs = new JButton("6");
JButton eins = new JButton("1");
JButton zwei = new JButton("2");
JButton drei = new JButton("3");
JButton nichts = new JButton("0");
JButton gleich = new JButton ("=");


    

public CalculatorWindow2 () {
setTitle("Mein Taschenrechner");
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
add (display);
add (panel);
panel.setLayout(new GridLayout(5, 5));
panel.add (plus);
panel.add (minus);
panel.add (mal);
panel.add (sieben);
panel.add (acht);
panel.add (neun);
panel.add (vier);
panel.add (fünf);
panel.add (sechs);
panel.add (eins);
panel.add (zwei);
panel.add (drei);
panel.add (nichts);
panel.add (gleich);
panel.add (geteilt);


plus.addActionListener(this);
minus.addActionListener(this);
mal.addActionListener(this);
geteilt.addActionListener(this);
sieben.addActionListener(this);
acht.addActionListener(this);
neun.addActionListener(this);
vier.addActionListener(this);
fünf.addActionListener(this);
sechs.addActionListener(this);
eins.addActionListener(this);
zwei.addActionListener(this);
drei.addActionListener(this);
nichts.addActionListener(this);
gleich.addActionListener(this);

setSize(300,200);
setVisible(true);}

@Override
public void actionPerformed(ActionEvent event) {
String input = event.getActionCommand();
display.setText(display.getText() + input);
String ergebnis = display.getText();
double result = Double.parseDouble(ergebnis);
System.out.println(result);}}
 
Das sind die aktuellen Fehler
java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 
ich meine aber, dass ich noch einen Action Listener für das Gleich-Zeichen einbauen müsste.
So schmeisst der eigentlich alles durcheinander und verwirrt sich selbst.
Äh, einen "Parser bauen" bedeutet nicht, Double.parseDouble aufzurufen. Diese Methode parst - wie der Name schon sagt - lediglich eine Fließkommazahl, die als Zeichenfolge vorliegt, und nicht einen x-beliebigen mathematischen Term.
 
woher krieg ich denn die fertige bibliothek ?
in diesem Video habe ich den ablauf gefunden wie man einen Parser baut
is natürlich schon heftig
 
in diesem Video habe ich den ablauf gefunden wie man einen Parser baut
Ja, das ist aber noch sehr rudimentär. Es gibt ganz verschiedene Arten von Parsern, die ganz unterschiedlich aufgebaut sein können. Das hängt z. B. von der Grammatik ab, die man verarbeiten will.

woher krieg ich denn die fertige bibliothek ?
Die gibts wie Sand am mehr (OMG: Meer). Google mal nach java math expression library und such Dir eine aus, die Dir gefällt.
 
rennt jetzt wie verrückt🙂
Die Sache mit den 2 Displays ist schon hässlich. Kann man da was machen, damit das eingeben des Wertes z.B. klein angezeigt wird
und das Ergebnis groß?
Code:
package guessagain2;
import java.awt.event.*;
import javax.swing.*;

import org.nfunk.jep.JEP;

import java.awt.*;


@SuppressWarnings("serial")
public class CalculatorWindow2 extends JFrame implements ActionListener {

JTextField display = new JTextField(8);   
JTextField display2 = new JTextField(8);
JPanel panel = new JPanel();


JButton plus = new JButton ("+");
JButton minus = new JButton("-");
JButton mal = new JButton("*");
JButton geteilt = new JButton("/");
JButton sieben = new JButton("7");
JButton acht = new JButton("8");
JButton neun = new JButton("9");
JButton vier = new JButton("4");
JButton fünf = new JButton("5");
JButton sechs = new JButton("6");
JButton eins = new JButton("1");
JButton zwei = new JButton("2");
JButton drei = new JButton("3");
JButton nichts = new JButton("0");
JButton gleich = new JButton ("=");


    

public CalculatorWindow2 () {
setTitle("Mein Taschenrechner");
setLayout(new FlowLayout());
setDefaultCloseOperation(EXIT_ON_CLOSE);
pack();
add (display);
add (display2);
add (panel);
panel.setLayout(new GridLayout(5, 5));
panel.add (plus);
panel.add (minus);
panel.add (mal);
panel.add (sieben);
panel.add (acht);
panel.add (neun);
panel.add (vier);
panel.add (fünf);
panel.add (sechs);
panel.add (eins);
panel.add (zwei);
panel.add (drei);
panel.add (nichts);
panel.add (gleich);
panel.add (geteilt);


plus.addActionListener(this);
minus.addActionListener(this);
mal.addActionListener(this);
geteilt.addActionListener(this);
sieben.addActionListener(this);
acht.addActionListener(this);
neun.addActionListener(this);
vier.addActionListener(this);
fünf.addActionListener(this);
sechs.addActionListener(this);
eins.addActionListener(this);
zwei.addActionListener(this);
drei.addActionListener(this);
nichts.addActionListener(this);
gleich.addActionListener(this);

setSize(300,200);
setVisible(true);}

@Override
public void actionPerformed(ActionEvent event) {
String input = event.getActionCommand();
display.setText(display.getText() + input);
String ergebnis = display.getText();

JEP myParser = new JEP();
myParser.addStandardFunctions();
myParser.addStandardConstants();
myParser.parseExpression(ergebnis);
double result = myParser.getValue();
String result2 = String.valueOf(result);
display2.setText(result2);



}}
 
Machen kann man vieles, z. B. mit eigenen Komponenten. Bei den Standardkomponenten kannst Du natürlich die Schrift und deren Größe festlegen. Was mir einfallen würde, wäre, das gleiche Feld für Ein- und Ausgabe zu verwenden. Statt des zweiten Textfelds könntest Du dann auch eine JList verwenden, die die letzten n Eingaben bzw. Berechnungen anzeigt usw. Überleg Dir was.
 

Zurück
Oben