Taschenrechner mit GUI

Status
Nicht offen für weitere Antworten.

HolgerB

Mitglied
Hallo,

ich habe einen Taschenrechner nach diesem Tutorial nach programmiert.

Ich möchte den Taschenrechner um weitere Funktionen wie z.B. Wurzel, Prozentrechnung etc. ergänzen.

Da ich Anfänger bin, werden trotz diesem guten Tutorial nicht alle Fragen beantwortet.

Zur Zeit macht mir die Wurzelberechnung Probleme. Die Wurzel berechnen ist nicht weiter schwierig sondern eher wie der Ersteller des Tutorials die Berechnungen durchführen lässt.

Der Rechenalgorithmus (Funktion public void calculate(double x) bekommt nur eine Zahl von Typ double und damit wird alles berechnet.

Nun wenn ich die Wurzel berechnen möchte und 81 + Operator Wurzel dann steht immer noch 81 im Display und nicht das erwartete Ergebnis 9.

Der komplette Code:

Code:
import java.awt.*;
import javax.swing.*;

// Stellt die Schnittstelle und Klassen fuer die
// Ereignisbehandlung welche durch AWT Komponenten
// erzeugt wurden bereit
import java.awt.event.*;


/**
 * Erzeugt einen kleinen Taschenrechner.
 * @version 1.0 23.02.2008
 * @author hamster
 *
 */
public class Calculator
{
	
	public static void main(String[] args)
	{
		CalculatorFrame frame = new CalculatorFrame();
		// Wenn Frame geschlossen -> Programm schlie�en
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// Frame sichtbar machen
		frame.setVisible(true);
	}
}	

/**
 * Erzeugt einen Rahmen(Frame oder Container genannt). Der Frame nimmt
 * die Teile der Benutzeroberflaeche auf.
 * @param args
 */
class CalculatorFrame extends JFrame
{
	public CalculatorFrame()
	{
		// Name der Titelleiste
		setTitle("Calculator"); 
		CalculatorPanel panel = new CalculatorPanel();
		add(panel);
		// Groesse des Fensters an seine Komponenten anpassen(Tasten)
		pack();
	}
}

/**
 * Ausgaben und und/oder Menuleisten werden durch Panels erzeugt.
 * Panels selbst sind Container und Oberflaechen. Diese Panels werden
 * in ein Frame eingefuegt.
 * 
 * Das Frame selbst besteht aus mehreren darueberliegenden Layern,
 * dem Root Pane, dem Layered Pane, dem Glass Pane und dem
 * Content Pane. 
 * @author hamster
 *
 */


class CalculatorPanel extends JPanel
{
	
	private JPanel panel;
	private JButton display;
	private boolean start;
	private double result;
	private String lastCommand;
	
	public CalculatorPanel()
	{
		// Layout-Manager festlegen
		setLayout(new BorderLayout());
		
		result = 0;
		// Gibt das Ergebnis aus und ist das letzte Kommando der Berechnung.
		// Wird erneut eine Zahl gedrueckt beginnt eine neue Berechnung.
		lastCommand = "=";
		// Startflag setzen
		start = true;
		
		// Display hinzufuegen
		display = new JButton("0");
		display.setEnabled(false);
		// Display oben positionieren
		add(display, BorderLayout.NORTH);
		
		// Actionlistener insert erzeugen
		ActionListener insert = new InsertAction();
		// ActionListener command erzeugen
		ActionListener command = new CommandAction();
		
		panel = new JPanel();
		// Angabe der Anzahl von Spalten und Zeilen im Konstruktor
		panel.setLayout(new GridLayout(4, 5));
		
		// Generierung der numerischen Taschenrechner-Tasten
		addButton("7", insert);
		addButton("8", insert);
		addButton("9", insert);
		addButton("/", command);
		addButton("√", command);
		addButton("4", insert);
		addButton("5", insert);
		addButton("6", insert);
		addButton("*", command);
		addButton("x2", command);
		addButton("1", insert);
		addButton("2", insert);
		addButton("3", insert);
		addButton("-", command);
		addButton("%", command);
		addButton("0", insert);
		addButton(".", insert);
		addButton("=", command);
		addButton("+", command);
		addButton("xyz", command);
		
		// Panel Komponenten im Centerblock platzieren
		add(panel, BorderLayout.CENTER);
	}
	/**
	 * Taste in die mittlere Grundflaeche einfuegen.
	 * @param label Beschriftung der Taste
	 * @param listener der Ereignisempfaenger fuer die Taste
	 */
	private void addButton(String label, ActionListener listener)
	{
		JButton button = new JButton(label);
		// Ereignisempfaenger fuer die Schaltflaeche
		button.addActionListener(listener);
		panel.add(button);
	}
	
	/**
	 * Diese Aktion fuegt den String der Tastenaktion an das Ende
	 * des Anzeigetextes an
	 */
	private class InsertAction implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			String input = event.getActionCommand();
			// Beim Start keinen Text anzeigen
			// Das Start Flag anschlie�end auf false setzen
			if(start)
			{
				display.setText("");
				start = false;
			}
			// Text anzeigen
			display.setText(display.getText() + input);
		}
				
	}
	
	/**
	 * Diese Aktion fuehrt den mit der Taste verbundenen
	 * Befehl aus.
	 * @author hamster
	 *
	 */
	private class CommandAction implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			String command = event.getActionCommand();
			
			// Fuege den Praefix "-" an den String an wenn
			// es sich um den ersten Befehl handelt(negative Zahl
			if(start)
			{
				if(command.equals("-"))
				{
					display.setText(command);
					start = false;
				}
				else
				{
					lastCommand = command;
				}
			}
			else
			{
				// Berechnung ausfuehren
				calculate(Double.parseDouble(display.getText()));
				lastCommand = command;
				start = true;
			}
		}
	}	
		/**
		 * Fuehrt die anstehenden Berechnungen aus.
		 * @param x der mit dem vorherigen Ergebnis zu berechende Wert
		 */
		public void calculate(double x)
		{
			if(lastCommand.equals("+"))
				result = result + x;
			else if(lastCommand.equals("-"))
				result = result - x;
			else if(lastCommand.equals("*"))
				result = result * x;
			else if(lastCommand.equals("/"))
				result = result / x;
			else if(lastCommand.equals("√"))
				result = squirt(x);
				
		//	else if(lastCommand.equals("x2"))
				
			//	result = 
			else if(lastCommand.equals("="))
				result = x;
				display.setText("" + result);
			
		}
	
		public Double squirt(double y)
		{
			Math.sqrt(y);
			return y;
		}
		
}

Hat jemand eine Idee wie ich das einbauen könnte?

Mit
Code:
result = Math.sqrt(x);
ging es auch nicht.

Grüße
Holger
 
B

Beni

Gast
Wird der Befehl überhaupt richtig aufgerufen?
Code:
         else if(lastCommand.equals("√")){
            System.out.println( "Ja ich werde aufgerufen" );
            result = squirt(x);
         }
Falls das nichts ausgiebt, ist was mit deinen Strings falsch.

"result = Math.sqrt( x );" wäre IMHO nämlich schon richtig.
 
P

P

Gast
Hi!

Die squirt-Methode ist etwas fehlerhaft:
Code:
public Double squirt(double y)
      {
         Math.sqrt(y);
         return y;
      }
Da du der sqrt-Methode einen primitiven Datentyp übergibst, wird der Wert von y nur kopiert und nicht überschrieben, d.h. du musst das Ergebnis aus Math.sqrt(y) einer Variable wieder übergeben, z.B. mit y = Math.sqrt(y)

Btw: ich wäre vorsichtig, Buttons über Labels, die Sonderzeichen enthalten, zu identifizieren. Aber das gehört nicht hier her ;)
 
P

P

Gast
lol@Pappenheimer++ :D

Wir spritzen der Diskriminante was in den Hintern, dann wird sie kleiner ;)
 

HolgerB

Mitglied
Hallo,

@ P
Habe ich geändert. Danke.

@ Beni

Nein wird nicht ausgeführt.

So wie ich den Code sehe erwartet das Programm eine zweite Zahl nach der Angabe des Rechenzeichens.
Bei +,-,*,/ erscheint das Ergebnis erst beim Drücken der "=" Taste.

Da bei der Wurzel keine zweite Zahl kommt funktioniert es anscheinend nicht. Der Grund muss irgendwo Code stecken, nur als Anfänger sehe ich diesen (noch) nicht.

Das ist das Problem was ich versuche zu lösen.

Grüße
Holger
 

HolgerB

Mitglied
Hallo,

So, ich habs nun selbst gelöst. ;)

Falls es jemanden interessiert:
Damit das mit dem Wurzel ziehen funktioniert habe ich eine if-Bedingung eingebaut.


Code:
private class CommandAction implements ActionListener
	{
		public void actionPerformed(ActionEvent event)
		{
			String command = event.getActionCommand();
			
			// Fuege den Praefix "-" an den String an wenn
			// es sich um den ersten Befehl handelt(negative Zahl
			if(start)
			{
				if(command.equals("-"))
				{
					display.setText(command);
					start = false;
				}
				else
				{
					lastCommand = command;
				}
			}
			else
			{
	                       if(command.equals("√"))
				{
					// Berechnung ausfuehren
					lastCommand = command;
					calculate(Double.parseDouble(display.getText()));
					
				}
				else
				{
					calculate(Double.parseDouble(display.getText()));
					lastCommand = command;
				}
					start = true;
			}
		}
	}	
		/**
		 * Fuehrt die anstehenden Berechnungen aus.
		 * @param x der mit dem vorherigen Ergebnis zu berechende Wert
		 */
		public void calculate(double x)
		{
			if(lastCommand.equals("+"))
				result = result + x;
			else if(lastCommand.equals("-"))
				result = result - x;
			else if(lastCommand.equals("*"))
				result = result * x;
			else if(lastCommand.equals("/"))
				result = result / x;
			else if(lastCommand.equals("√"))
				result = Math.sqrt(x);
				
		//	else if(lastCommand.equals("x2"))
				
			//	result = 
			else if(lastCommand.equals("="))
				result = x;
				display.setText("" + result);
			
		}

Vielen Dank an alle die geholfen haben.

Grüße
Holger
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
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
J Grafischen Taschenrechner programmieren - Frage dazu Java Basics - Anfänger-Themen 12
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
M While bei einem Taschenrechner Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben