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);
    

    
    
    }}

 
K

kneitzel

Gast
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.
 

bene98

Aktives Mitglied
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);
    
  
    
    
    }}
 
K

kneitzel

Gast
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.
 

bene98

Aktives Mitglied
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);
   }
  
    
    
    }}
 
K

kneitzel

Gast
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?
 

Blender3D

Top Contributor
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]);
        }
    }
}
 

bene98

Aktives Mitglied
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);   
     } }
 
K

kneitzel

Gast
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?
 

bene98

Aktives Mitglied
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
 
K

kneitzel

Gast
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?
 

bene98

Aktives Mitglied
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
 
K

kneitzel

Gast
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.
 

bene98

Aktives Mitglied
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();

}}
 

bene98

Aktives Mitglied
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?
 

bene98

Aktives Mitglied
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?
 

bene98

Aktives Mitglied
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);}}
 

bene98

Aktives Mitglied
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)
 

mihe7

Top Contributor
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.
 

bene98

Aktives Mitglied
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
 

mihe7

Top Contributor
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.
 

bene98

Aktives Mitglied
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);



}}
 

mihe7

Top Contributor
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
E repaint Probleme AWT, Swing, JavaFX & SWT 13
mananana Mögliche probleme die in einer GUI passieren Können AWT, Swing, JavaFX & SWT 6
S GridBagLayout - Probleme mit Bilderanzeige AWT, Swing, JavaFX & SWT 3
I Probleme beim Drucken auf einen PDF-Drucker AWT, Swing, JavaFX & SWT 8
J Probleme mit idividueller Tablecell AWT, Swing, JavaFX & SWT 0
D JavaFX Probleme beim nachtäglichen hinzufügen der jfx dependency AWT, Swing, JavaFX & SWT 7
J Probleme mit InputDialog AWT, Swing, JavaFX & SWT 4
D JavaFX TextArea Probleme bei langen Zeilen AWT, Swing, JavaFX & SWT 1
G JavaFX SplitPane Anwendung - Controller Probleme AWT, Swing, JavaFX & SWT 5
K Probleme bei der Erstellung und Ausführung einer Jar Datei AWT, Swing, JavaFX & SWT 2
pph080560 JavaFX Probleme mit FX AWT, Swing, JavaFX & SWT 3
M Probleme mit OpenJDK AWT, Swing, JavaFX & SWT 6
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
B Swing Probleme mit dem Layout AWT, Swing, JavaFX & SWT 1
L JavaFX Probleme beim Installieren JavaFX11 / JavaFX12 -- Eclipse 2019-03 AWT, Swing, JavaFX & SWT 3
Fiedlerdan Image-Pfad Probleme nach Export aus Eclipse AWT, Swing, JavaFX & SWT 31
H JFreeChart - DemoDataSetFactory Probleme AWT, Swing, JavaFX & SWT 1
H LayoutManager Probleme mit Positionierung/Abständen der Komponenten AWT, Swing, JavaFX & SWT 14
A Probleme mit gridheight (GridBagLayout) AWT, Swing, JavaFX & SWT 6
U Opaque Probleme AWT, Swing, JavaFX & SWT 3
H JavaFX Probleme Beim Wechseln der scene als .fxml AWT, Swing, JavaFX & SWT 7
F JavaFX Probleme beim automatischen Konvertieren AWT, Swing, JavaFX & SWT 4
S Probleme mit JComboboxen(?) AWT, Swing, JavaFX & SWT 18
S Swing Probleme mit MigLayout AWT, Swing, JavaFX & SWT 2
C Probleme mit createImage AWT, Swing, JavaFX & SWT 1
J Probleme mit contex Menu (javafx) AWT, Swing, JavaFX & SWT 1
J Probleme bei GameofLife AWT, Swing, JavaFX & SWT 24
S JavaFx - Button ActionEvent Probleme AWT, Swing, JavaFX & SWT 3
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 0
ImperatorMing JavaFX Probleme mit WindowEvent AWT, Swing, JavaFX & SWT 5
J LayoutManager GridBagLayout, probleme mit Anordnung von Objekten AWT, Swing, JavaFX & SWT 6
T Java FX Probleme beim befüllen eines Tableviews AWT, Swing, JavaFX & SWT 5
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
D Swing Probleme mit dem Resizing AWT, Swing, JavaFX & SWT 7
G Probleme mit TextArea AWT, Swing, JavaFX & SWT 5
G JFrame Probleme AWT, Swing, JavaFX & SWT 2
K Probleme beim JPasswordField AWT, Swing, JavaFX & SWT 11
G Cardlayout Refresh Probleme AWT, Swing, JavaFX & SWT 2
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
D JavaFX Probleme bei Service-Klasse beim ändern der GUI AWT, Swing, JavaFX & SWT 8
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
L Probleme mit Programm AWT, Swing, JavaFX & SWT 13
blazingblade komischerweise probleme mit jtextfield.gettext() AWT, Swing, JavaFX & SWT 9
Xanny 2D-Grafik Beginner! Probleme mit Swing, Gprahics class und paint AWT, Swing, JavaFX & SWT 13
Sin137 LayoutManager GridBagLayout Probleme AWT, Swing, JavaFX & SWT 6
H Netbeans Designer: Probleme mit JPanel und JFrame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
C Java FX Probleme beim Schließen einer Stage AWT, Swing, JavaFX & SWT 11
M Swing JProgressbar und Outoputstream probleme AWT, Swing, JavaFX & SWT 2
S Swing Probleme mit transparenz der Hintergrundfarbe und JRadioButtons AWT, Swing, JavaFX & SWT 2
Z Probleme mit JPanel's AWT, Swing, JavaFX & SWT 6
T Probleme mit Anzeige von Elementen im JPanel AWT, Swing, JavaFX & SWT 1
Shams Probleme bei dem Hinzufügen von Komponenten zu einem JFrame AWT, Swing, JavaFX & SWT 3
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
M Layout-Probleme unter Swing AWT, Swing, JavaFX & SWT 5
H Swing Probleme beim erstellen eines neuen Objektes durch einen Button AWT, Swing, JavaFX & SWT 10
J JavaFX JavaFX Probleme bei der Anzeige von Text AWT, Swing, JavaFX & SWT 18
A Probleme mit TilledBorder("***") AWT, Swing, JavaFX & SWT 4
F Bildschirmschoner Probleme mit Preview AWT, Swing, JavaFX & SWT 8
X Panel Probleme (Tetris) AWT, Swing, JavaFX & SWT 8
N JTable probleme AWT, Swing, JavaFX & SWT 5
B Probleme bei ImageIO.read (?!) AWT, Swing, JavaFX & SWT 9
P JFrame Location-/Size-Probleme AWT, Swing, JavaFX & SWT 5
U LayoutManager Probleme mit Layouts AWT, Swing, JavaFX & SWT 5
C 3 kleine Probleme... AWT, Swing, JavaFX & SWT 13
L NullpointerException und Probleme mit repaint() AWT, Swing, JavaFX & SWT 11
A Probleme mit 2 JFrames in einem Programm AWT, Swing, JavaFX & SWT 7
K LayoutManager Probleme mit 2 Komponenten AWT, Swing, JavaFX & SWT 9
C Probleme mit Buttons und einem ActionListener AWT, Swing, JavaFX & SWT 2
M Probleme mit Verkleinern eines GUI AWT, Swing, JavaFX & SWT 7
B Swing label.setText() macht probleme AWT, Swing, JavaFX & SWT 5
B ImageIcon - Probleme mit dem Dateipfad AWT, Swing, JavaFX & SWT 5
H JTree Probleme AWT, Swing, JavaFX & SWT 9
F Probleme mit (Graphics g) II AWT, Swing, JavaFX & SWT 4
F Probleme mit (Graphics g) AWT, Swing, JavaFX & SWT 3
K 2D-Grafik .GIF macht mir Probleme AWT, Swing, JavaFX & SWT 14
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
T JTable Graphik probleme AWT, Swing, JavaFX & SWT 3
H GridBagLayout macht Probleme... AWT, Swing, JavaFX & SWT 4
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
S Swing Lauftext Performance Probleme, in größerer Anwendung AWT, Swing, JavaFX & SWT 6
B Infolabel Probleme mit Paint() ? AWT, Swing, JavaFX & SWT 8
P Probleme mit setIconImage AWT, Swing, JavaFX & SWT 8
U Swing Probleme mit Asynchronen Prozessen und Swing: AWT, Swing, JavaFX & SWT 3
das-mo Probleme mit GridBagLayout AWT, Swing, JavaFX & SWT 6
N 2D-Grafik 2 Probleme beim zeichnen AWT, Swing, JavaFX & SWT 18
L Probleme mit JPanel AWT, Swing, JavaFX & SWT 8
D Probleme bei Übertrag von ArrayList in Jtable AWT, Swing, JavaFX & SWT 2
G kleinere Probleme mit GUI AWT, Swing, JavaFX & SWT 2
G Mehrere Probleme mit Java's GUI AWT, Swing, JavaFX & SWT 6
M Swing Erste Schritte mit der GUI, viele Probleme AWT, Swing, JavaFX & SWT 36
J GUI-Aktualisierungs-Probleme AWT, Swing, JavaFX & SWT 4
B Performance-Probleme AWT, Swing, JavaFX & SWT 17
I Probleme if-Anweisung AWT, Swing, JavaFX & SWT 26
D Swing Probleme bei transparenten Hintergrund im JTextField AWT, Swing, JavaFX & SWT 6
N 2D-Grafik BufferedImage, Line2D, Swing und die Probleme AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben