Grafischen Taschenrechner programmieren - Frage dazu

Jack159

Bekanntes Mitglied
Ich bin gerade dabei einen simplen Taschenrechner zu programmieren.
Erstmal will ich nur einen abgespeckten Taschenrechner programmieren:

http://img208.imageshack.us/img208/3479/taschnrechner.jpg

Ziel soll sein, dass ich auf die "1" klicke, dann auf "+", dann auf die "2" und dann auf "=".
Wenn ich jetzt die 1 anklicke, soll "1" im Textfeld stehen. Klicke ich danach + an, soll dann "1+" im Textfeld stehen. Klicke ich die 2 an, soll dann "1+2" im Textfeld stehen. Beim Klick auf = soll dann das der Inhalt des Textfeldes gelöscht werden und stattdessen das Ergebniss dort ausgegeben werden.

Mein Problem ist nur, dass ich nicht weiß, wie ich dem Textfeld mehr als 1 Sache hinzufügen kann.
Wenn ich also die 1 anklicke, steht dann 1 im Textfeld. Wenn ich jetzt + anklicke, soll 1+ im Textfeld stehen. Die 1 soll also nicht überschrieben werden. Wie genau mache ich das?
 

Jack159

Bekanntes Mitglied
Java:
Textfeld.getText() += "Neuer Text"

Damit zeigt der mir einen Fehler an.

Ich habs jetzt zumindest erstmal hinbekommen, dass wenn ich auf 1 klicke, 1 in dem Textfeld erscheint.
Klicke ich danach aber z.b. auf 2, verschwindet die 1 wieder aus dem Textfeld und es steht nur die 2 da.

Hier mal mein Code

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class NullLayout  {

	JButton button1;
	JButton button2;
	JButton buttonPlus;
	JButton buttonGleich;
	JTextField field;
	
	String x;
	
	
	
	public static void main (String[] args) {
		NullLayout gui = new NullLayout();
		gui.los();
		
	}
	
	
	public void los() {
		
		JFrame frame = new JFrame();
		button1 = new JButton("1");
		button2 = new JButton("2");
		buttonPlus = new JButton("+");
		buttonGleich = new JButton("=");
		field = new JTextField(20);
		
		
		button1.addActionListener(new button1Listener());
		button2.addActionListener(new button2Listener());
		buttonPlus.addActionListener(new buttonPlusListener());
		
		
		
		frame.setSize(600,600);
		frame.setVisible(true);
		frame.setLayout(null);
		
		
		frame.add(button1);
		button1.setBounds(50,250,100,100);
		frame.add(button2);
		button2.setBounds(200,250,100,100);
		frame.add(buttonPlus);
		buttonPlus.setBounds(350,250,100,100);
		frame.add(buttonGleich);
		buttonGleich.setBounds(350,400,100,100);
		
		frame.add(field);
		field.setBounds(100,100,300,25);

		
}
	
	class button1Listener implements ActionListener {
		
		public void actionPerformed(ActionEvent event) {
			field.setText("1");
			
		}
	}
	
	class button2Listener implements ActionListener {
		
		public void actionPerformed(ActionEvent event) {
			field.setText("2");
			
		}
	}
	
	class buttonPlusListener implements ActionListener {
		
		public void actionPerformed(ActionEvent event) {
			field.setText("+");
			
		}
	}
	

}
 

Jack159

Bekanntes Mitglied
Java:
field.setText(field.getText() + "neuer Text");

Damit funktioniert es soweit.
Mein jetztiges Problem ist, dass ich dann den Ausdruck z.b. "1+2" irgendwie nicht ausgerechnet bekomme. Mein Ansatz war, erstmal den String "1+2" in einen int umzuwandeln, damit der Ausdruck "1+2" im int ausgerechnet wird (was ja 3 ergibt). Danach wird der int wieder in einen String umgewandelt und an das textfeld übergeben.
Funktioniert aber irgendwie nicht. Wenn ich auf "=" klicke, zeigt er mir immer 0 an.
Hier mein überarbeiteter Code:

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;




public class NullLayout  {

	JButton button1;
	JButton button2;
	JButton buttonPlus;
	JButton buttonGleich;
	JTextField field;
	
	
	String x;
	
	
	
	public static void main (String[] args) {
		NullLayout gui = new NullLayout();
		gui.los();
		
	}
	
	
	public void los() {
		
		JFrame frame = new JFrame();
		button1 = new JButton("1");
		button2 = new JButton("2");
		buttonPlus = new JButton("+");
		buttonGleich = new JButton("=");
		field = new JTextField(20);
		
		
		
		button1.addActionListener(new button1Listener());
		button2.addActionListener(new button2Listener());
		buttonPlus.addActionListener(new buttonPlusListener());
		buttonGleich.addActionListener(new buttonGleichListener());
		
		
		
		
		frame.setSize(600,600);
		frame.setVisible(true);
		frame.setLayout(null);
		
		
		frame.add(button1);
		button1.setBounds(50,250,100,100);
		frame.add(button2);
		button2.setBounds(200,250,100,100);
		frame.add(buttonPlus);
		buttonPlus.setBounds(350,250,100,100);
		frame.add(buttonGleich);
		buttonGleich.setBounds(350,400,100,100);
		
		frame.add(field);
		field.setBounds(100,100,300,25);

		
}
	
	class button1Listener implements ActionListener {
		
		public void actionPerformed(ActionEvent event) {
			field.setText(field.getText() + "1");
			
		}
	}
	
	class button2Listener implements ActionListener {
		
		public void actionPerformed(ActionEvent event) {
			field.setText(field.getText() + "2");
			
		}
	}
	
	class buttonPlusListener implements ActionListener {
		
		public void actionPerformed(ActionEvent event) {
			field.setText(field.getText() + "+");
			
		}
	}
	
	class buttonGleichListener implements ActionListener {
		
		public void actionPerformed(ActionEvent event) {
			String text = field.getText();
			int ergebniss = 0;
			
			try {
				ergebniss = Integer.parseInt (text);
				} catch (Exception E){
					
				}
			
				String textErgebniss = Integer.toString(ergebniss);
				field.setText(textErgebniss);
		}
	}
	
	



}
 
Zuletzt bearbeitet:

Landei

Top Contributor
Damit funktioniert es soweit.
Mein jetztiges Problem ist, dass ich dann den Ausdruck z.b. "1+2" irgendwie nicht ausgerechnet bekomme.

ROTFL!!1!!einself!!!

Sorry, aber ein String ist ein String ist ein String - und kein int. Für Solche Probleme gibt es prinzipiell zwei Herangehensweisen: Die Formel selbst zerlegen und ausrechnen (hier schwirrt irgendwo der Code von Beni für einen Formelparser herum) oder eine dynamische Sprache wie JavaScript aufrufen (was mit der ScriptEngine geht) und den Code ausrechnen lassen. Such mal im Forum, du bist wirklich nicht der Erste, der das machen will.
 

timbeau

Gesperrter Benutzer
Du meinst beim simplen casten von String zu Int erkennt Java, dass es sich um eine Rechenoperation mit 2 Integern und einem Rechenzeichen handelt und interpretiert das auch noch richtig?

Wenn du String x = "1" + "2" schreibst kommt "12" raus
 

Jack159

Bekanntes Mitglied
Dann funktioniert das wohl doch nicht so, wie ich mir das gedacht habe.
Ich habe mir jetzt mal diesen Formel-Parser angeschaut. Das ganze ist wohl doch etwas komplizierter als ich zunächst dachte^^
 

eRaaaa

Top Contributor
Naja Landei hatte dir ja bereits noch eine Möglichkeit aufgezählt:
Java:
import javax.script.*;


		ScriptEngine engine = new ScriptEngineManager().getEngineByName( "JavaScript" );
		double x = (Double) engine.eval( "1+2" ); //3.0
 
G

gghorkii

Gast
Java:
int x (x = ist die Variabel, in der dann das Int gespeichert wird) = Integer.valueOf(HIER DEINE STRING VARIABEL).intValue();

Das machst du dann mit deinen 2 Variabeln, danach kannst du sie ganz einfach zusammenrechnen z.B. so:

Java:
ergebnisZahl = x + deineZweiteVariabel;

Das Ergebnis wird dann einfach in ergebnisZahl gespeichert.

MfG,
Ghorki
 

Andi_CH

Top Contributor
So - konstruktiver Vorschlag meinerseits :

Nebenbei - kann die Methode toString für den Operator in den enum gepflanzt werden?
Gefällt mir nicht so.

Es gefällt mir auch sonst einiges nicht so, aber ich bleib mal so nahe wie möglich an der Vorgabe ...

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

public class Taschenrechner2  {

	private enum Operator {
		keiner, plus, minus, mal, durch
	}

	private String toString ( Operator op) {
		switch (op) {
		case plus: return "+";
		case minus: return "-";
		case mal: return "*";
		case durch: return "/";
		default: return "";
		}
	}

	private JButton button1;
	private JButton button2;
	private JButton buttonPlus;
	private JButton buttonGleich;
	private JTextField field;

	private int lValue = 0;
	private int rValue = 0;
	private boolean lValueIsResult = false;
	private Operator lastOperator = Operator.keiner;

	public static void main (String[] args) {
		Taschenrechner2 gui = new Taschenrechner2();
		gui.los();
	}

	public void los() {
		JFrame frame = new JFrame();
		button1 = new JButton("1");
		button2 = new JButton("2");
		buttonPlus = new JButton("+");
		buttonGleich = new JButton("=");
		field = new JTextField(20);

		button1.addActionListener(new button1Listener());
		button2.addActionListener(new button2Listener());
		buttonPlus.addActionListener(new buttonPlusListener());
		buttonGleich.addActionListener(new buttonGleichListener());

		frame.setSize(600,600);
		frame.setVisible(true);
		frame.setLayout(null);

		frame.add(button1);
		button1.setBounds(50,250,100,100);
		frame.add(button2);
		button2.setBounds(200,250,100,100);
		frame.add(buttonPlus);
		buttonPlus.setBounds(350,250,100,100);
		frame.add(buttonGleich);
		buttonGleich.setBounds(350,400,100,100);

		frame.add(field);
		field.setBounds(100,100,300,25);
	}

	private String generateDisplayString() {
		if (lastOperator==Operator.keiner)
			return ""+lValue;
		else if (rValue==0)
			return lValue + toString(lastOperator);
		else
			return lValue + toString(lastOperator) + rValue;
	}

	private void calculate() {
		if (lastOperator!=Operator.keiner) {
			switch (lastOperator) {
			case plus: lValue = lValue + rValue; break;
			case minus: lValue = lValue - rValue; break;
			case mal: lValue = lValue * rValue; break;
			case durch: lValue = lValue / rValue; break;
			}
			lastOperator = Operator.keiner;
			rValue = 0;
			lValueIsResult = true;
		}
	}

	private class button1Listener implements ActionListener {

		public void actionPerformed(ActionEvent event) {
			if (lastOperator==Operator.keiner) {
				if (lValueIsResult) {
					lValue = 1;
					lValueIsResult = false;
				} else {
					lValue = lValue*10+1;
				}
			} else {
				rValue = rValue*10+1;
			}
			field.setText(generateDisplayString());
		}
	}

	private class button2Listener implements ActionListener {

		public void actionPerformed(ActionEvent event) {
			if (lastOperator==Operator.keiner) {
				if (lValueIsResult) {
					lValue = 2;
					lValueIsResult = false;
				} else {
					lValue = lValue*10+2;
				}
				
			} else {
				rValue = rValue*10+2;
			}
			field.setText(generateDisplayString());
		}
	}

	private class buttonPlusListener implements ActionListener {

		public void actionPerformed(ActionEvent event) {
			if (lastOperator!=Operator.keiner)
				calculate();
			lastOperator = Operator.plus;
			field.setText(generateDisplayString());
		}
	}

	private class buttonGleichListener implements ActionListener {

		public void actionPerformed(ActionEvent event) {
			if (rValue != 0)
				calculate();
			field.setText(generateDisplayString());
		}
	}
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
G Aus- und Einblenden von grafischen Elementen Java Basics - Anfänger-Themen 4
Paule 2 Fragen zur grafischen Oberfläche Java Basics - Anfänger-Themen 5
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
R Einfacher Taschenrechner mit Eclipse Java Basics - Anfänger-Themen 3
M Einfacher Taschenrechner Java Basics - Anfänger-Themen 2
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
W Taschenrechner mit Switch case Java Basics - Anfänger-Themen 4
W Taschenrechner Java Basics - Anfänger-Themen 11
A Taschenrechner mit Gui erstellen Java Basics - Anfänger-Themen 9
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
P Taschenrechner mit unendlich vielen Eingabemöglichkeiten Java Basics - Anfänger-Themen 1
V Erste Schritte Taschenrechner mit beliebig vielen Zahlen Java Basics - Anfänger-Themen 5
S Taschenrechner Java Basics - Anfänger-Themen 13
P Taschenrechner Text übertragung Java Basics - Anfänger-Themen 3
S Compiler-Fehler Basic- Taschenrechner/ Fehler Java Basics - Anfänger-Themen 8
S Basic- Taschenrechner? Java Basics - Anfänger-Themen 7
P Hilfe bei Java Taschenrechner Java Basics - Anfänger-Themen 25
F Erste Schritte Frage zu simplem Taschenrechner(switch) Java Basics - Anfänger-Themen 16
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
S Taschenrechner hilfe! Java Basics - Anfänger-Themen 17
H Java Taschenrechner Java Basics - Anfänger-Themen 4
R Variablen Taschenrechner mit Komfortfunktionen Java Basics - Anfänger-Themen 2
J RPN Taschenrechner - keine Lösung!! Java Basics - Anfänger-Themen 84
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
Q simpler Taschenrechner Java Basics - Anfänger-Themen 34
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
R Variablen Weitergehenderr Taschenrechner Java Basics - Anfänger-Themen 4
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
M Java Taschenrechner Programmieren Java Basics - Anfänger-Themen 12
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
G Taschenrechner gibt nur 0.0 aus Java Basics - Anfänger-Themen 8
A Taschenrechner programmieren Java Basics - Anfänger-Themen 21
Z Java Taschenrechner Java Basics - Anfänger-Themen 6
J Kleiner Taschenrechner! Anfänger braucht Hilfe :( Java Basics - Anfänger-Themen 2
C Taschenrechner in Java Java Basics - Anfänger-Themen 6
J Erste Schritte Java CMD Taschenrechner mit Parametern! Java Basics - Anfänger-Themen 16
J Taschenrechner: Probleme Java Basics - Anfänger-Themen 5
E Taschenrechner problem! Ich komme nicht voran Java Basics - Anfänger-Themen 18
R Erste Schritte Taschenrechner mit Schleife Java Basics - Anfänger-Themen 24
Lord.Djerun (Taschenrechner Netbeans) Komma nur einmal schreiben & 0 ersetzen Java Basics - Anfänger-Themen 1
Z Taschenrechner - Additions/Substraktions/Multiplikations/Divionsketten! Java Basics - Anfänger-Themen 4
D Taschenrechner Frage Java Basics - Anfänger-Themen 12
Z Sehr simpler Taschenrechner - Hilfe! Java Basics - Anfänger-Themen 10
Z Taschenrechner - Wie addiere,multipliziere und subtrahiere ich? Java Basics - Anfänger-Themen 6
D kleiner Taschenrechner mit switch fehlerhaft Java Basics - Anfänger-Themen 1
K Taschenrechner im GUI Java Basics - Anfänger-Themen 2
P Taschenrechner, operatoren Java Basics - Anfänger-Themen 4
D Simpler Taschenrechner Java Basics - Anfänger-Themen 6
A Anfänger Taschenrechner Frage Java Basics - Anfänger-Themen 14
R Erste Schritte Taschenrechner - Punkt-vor-Strich Rechnung Java Basics - Anfänger-Themen 1
S Operatoren Taschenrechner Ergebnis ausgeben Java Basics - Anfänger-Themen 7
A Taschenrechner zeigt Error Java Basics - Anfänger-Themen 7
J Taschenrechner Funktion Java Basics - Anfänger-Themen 18
M Taschenrechner fertigstellung Java Basics - Anfänger-Themen 1
N Methoden Taschenrechner Java Basics - Anfänger-Themen 2
F z = input.nextChar(); PROBLEM Taschenrechner Java Basics - Anfänger-Themen 7
J Scanner Taschenrechner? Java Basics - Anfänger-Themen 7
J Variablen Rechenzeichen und Zahlen verknüpfen für einen Taschenrechner Java Basics - Anfänger-Themen 17
B Klassen Java Taschenrechner mit Klassen und Methoden Java Basics - Anfänger-Themen 12
B Erste Schritte Brauche Hilfe bei einem Java-Taschenrechner Java Basics - Anfänger-Themen 11
R Methoden Taschenrechner Java Basics - Anfänger-Themen 4
P Taschenrechner , IF-Abfrage Java Basics - Anfänger-Themen 12
I Taschenrechner - Methoden implementieren Java Basics - Anfänger-Themen 5
I Java Starthilfe (Taschenrechner) Java Basics - Anfänger-Themen 7
J Taschenrechner Problemchen Java Basics - Anfänger-Themen 3
D Erste Schritte Taschenrechner Java Basics - Anfänger-Themen 11
K taschenrechner - Fehler beim Kürzen eines Bruches finden Java Basics - Anfänger-Themen 20
J Taschenrechner Punkt vor Strich Java Basics - Anfänger-Themen 9
A Taschenrechner programmieren Java Basics - Anfänger-Themen 5
M Ausklappbares Fenster bei grafischem Taschenrechner Java Basics - Anfänger-Themen 2
M Dividieren bei Grafischem Taschenrechner klappt nicht Java Basics - Anfänger-Themen 2
N Taschenrechner mit Unterprogra Java Basics - Anfänger-Themen 6
C Taschenrechner Java Basics - Anfänger-Themen 12
Z Taschenrechner programmieren Java Basics - Anfänger-Themen 5
E Erste Schritte Taschenrechner Java Basics - Anfänger-Themen 8
K Taschenrechner Java Basics - Anfänger-Themen 25
J Textfeld für Taschenrechner Java Basics - Anfänger-Themen 3
D Taschenrechner Java Basics - Anfänger-Themen 28
A Taschenrechner-GUI mit BorderLayout? Java Basics - Anfänger-Themen 6
W [PROJEKT] Simpler grafischer Taschenrechner Java Basics - Anfänger-Themen 8
M Taschenrechner mit JApplet Java Basics - Anfänger-Themen 26
W Taschenrechner Java Basics - Anfänger-Themen 2
T Tasten vom Taschenrechner? Java Basics - Anfänger-Themen 3
S Datentypen Taschenrechner Java Basics - Anfänger-Themen 13
J Taschenrechner Java Basics - Anfänger-Themen 5
J Taschenrechner Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben