Taschenrechner mit JApplet

mal-de

Mitglied
Hallo Freunde 🙂

Hoffe ich bin hier richtig mit meinem Post.
Ich bin ganz frisch hier und auch mehr oder weniger in Java.
Hab jetzt zwar ein Semester hinter mir, aber irgendwie haben die uns da nicht sooo viel beigebracht.

Naja. Auf jeden Fall versuche ich grad einen Taschenrechner zu Programmieren, der später im Browser laufen soll. Quasi benutze ich ein JApplet. Soweit bin ich bereits, komme aber irgendwie nicht weiter:

[Java]
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;



public class Applet extends JApplet implements ActionListener {

public TextField f1 = new TextField();

public Applet() {

Container content = getContentPane();
content.setLayout(new BorderLayout());
content.setBackground(Color.green);

JPanel northPanel = new JPanel();
JPanel centerPanel = new JPanel();

content.add(northPanel, BorderLayout.NORTH);
content.add(centerPanel, BorderLayout.CENTER);

northPanel.setLayout(new GridLayout(1, 1));
centerPanel.setLayout(new GridLayout(4, 4));

northPanel.add(f1);

JButton b1 = new JButton("7");
centerPanel.add(b1);
b1.addActionListener(this);
b1.setActionCommand("7");

..... hier wären die anderen Buttons

}

public void actionPerformed(ActionEvent event) {
f1.setText(f1.getText() + event.getActionCommand());
}

}
[/Java]

Also wenn ich nun auf die Button drücke, wird die Zahl ins TextField geschrieben.
Aber wie rechne ich nun damit?!

Steh ein wenig auf dem Schlauch.

Danke schon einmal 🙂
 
Java:
int zahl = Integer.parseInt(f1.getText());
mit zahl kannst du dann normal rechnen.

Nenn deine Klasse besser anders, es gibt bereits eine Klasse in Java die Applet heißt.
 
Hallo Freunde 🙂


Also wenn ich nun auf die Button drücke, wird die Zahl ins TextField geschrieben.
Aber wie rechne ich nun damit?!

Steh ein wenig auf dem Schlauch.

Danke schon einmal 🙂

Also ich wuerde an deiner Stelle
Java:
private JTextField eingabeFeld1, eingabeFeld2;

nehmen, dann kannst die Zahlen direkt eingeben, ohne das du was druecken musst.

Grafisch kann der Taschenrechner ungefaehr so aussehen:

f1.JPG

Die Werte aus den Eingabefelder musst du dann in Variablen am besten vom Typ double speichern und damit dann deine Formel fuettern.
 
Okay .. habs hinbekommen eine Zahl in "int zahl" zu speichern.
Aber jetzt stellt sich mir halt noch die Frage, wie ich das +, - ... und eine zweite Zahl speicher.

Meine Überlegung war, es über verschiedene Methoden oder in dem Fall müssten es dann Action sein?! Zum Beispiel irgendwie so

[Java]
JButton b13 = new JButton("=");
centerPanel.add(b13);
b13.addActionListener(this);
b13.setAction(gibErgebnis());
[/Java]

Funktioniert aber eher weniger ... hm.
 
Zuletzt bearbeitet:
Okay .. habs hinbekommen eine Zahl in "int zahl" zu speichern.
Aber jetzt stellt sich mir halt noch die Frage, wie ich das +, - ... und eine zweite Zahl speicher.

Meine Überlegung war, es über verschiedene Methoden oder in dem Fall müssten es dann Action sein?! Zum Beispiel irgendwie so

[Java]
JButton b13 = new JButton("=");
centerPanel.add(b13);
b13.addActionListener(this);
b13.setAction(gibErgebnis());
[/Java]

Funktioniert aber eher weniger ... hm.

Ich wuerde erst ueberlegen wie dein Taschenrechner aussehen soll, grafisch. Wenn etwa so wie gmx777 vorschlaegt, dann brauchst du einen Listener, wenn eines der RadioButtons betaetigt wird, dann soll eine Methode fuer die entsprechende Rechenoperation aufgerufen werden, z. B. fuer Addition. Die Formel kannst so dann in der Methode schreiben
Code:
ergebnis=zahl1+zahl2

Diese vereinbarst alle als double Variablen und das Ergebnis der Variable ergebnis uebergibst du dem Label wo das Ergebnis erscheinen soll
 
Also was ich mir bislang gebastelt hab sieht so aus.

rechner.png
 
Das ist dann die schwierige Version, na ja wenn es vielleicht so verlangt wird???:L
Machst dir vielleicht zu viel Muehe?

Aber wenn so etwas haben willst, dann brauchst fuer jeden Button einen Listener, hast du wahrscheinlich schon?

Die Mühe kommt eher aus eigenem Willen.
Meinst du das so mit "Jeder Button braucht einen eigenen Listener" ?

[Java]
JButton b13 = new JButton("=");
centerPanel.add(b13);
b13.addActionListener(new ErgebnisListener());
b13.setActionCommand(" = ");
[/Java]

[Java]
public class ErgebnisListener implements ActionListener {

public void actionPerformed(ActionEvent event) {
System.out.println(event.getActionCommand());

// f1.setText(f1.getText() + event.getActionCommand());

}
}
[/Java]

Wenn ja, dann habe ich da ein Problem =/
Ich kann nämlich nicht auf das TextField zugreifen. Wenn ich dann aber
public class ErgebnisListener extends Rechner implements ActionListener
schreibe, dann kommt jedes mal Applet nicht initialisiert ..
 
Ich nehme an du hast dein Applet von umbenannt in Rechner.
Wenn du jetzt deine Actionlistener von Rechner erben lässt wäre jeder Actionlistener auch ein JApplet, und das is ja nicht sinn der sache...
Wenn du zugriff auf die objekte willst, dann gib deinem ActionListener eine Referenz auf dein Applet mit. Über getter und setter kommst du dann an deine daten.
 
Meinst du das so mit "Jeder Button braucht einen eigenen Listener" ?


Java:
        //die innere Klasse für die Ereignisverarbeitung
	class MeinListener implements ActionListener {
		
		@Override
		public void actionPerformed(ActionEvent e) {
			//wurde auf Beenden geklickt?
			//dann das Programm beenden
			if (e.getActionCommand().equals("ende")) 
				System.exit(0);
			//wurde auf Berechnen geklickt?
			//dann eine Methode für die Berechnung aufrufen
			//und das Ergebnis anzeigen
			if (e.getActionCommand().equals("rechnen"))  
				ausgabe.setText(berechnen());
                        
                       ...................usw.
		}
	}


Java:
                schaltflaecheBeenden = new JButton(" Beenden ");
		//das Aktion-Command setzen
		schaltflaecheBeenden.setActionCommand("ende");
		schaltflaecheBerechnen = new JButton("Berechnen");
		schaltflaecheBerechnen.setActionCommand("rechnen");

Java:
                //die Schaltflächen mit dem Listener verbinden
		MeinListener listener = new MeinListener();
		schaltflaecheBeenden.addActionListener(listener);
		schaltflaecheBerechnen.addActionListener(listener);


Klar?:bahnhof:
 
Okay .. das Werk ist vollbracht .. ^^
Aber irgendwie kann ich es nun nicht mehr im Browser öffnen. ???:L

Komische Sache ..

[Java]

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;



public class Rechner extends JApplet implements ActionListener {

public static double zahl1;
public static double zahl2;
public static String ergebnis;
public static char operator;


public TextField f1 = new TextField();

public Rechner() {

Container content = getContentPane();
content.setLayout(new BorderLayout());
content.setBackground(Color.green);

JPanel northPanel = new JPanel();
JPanel centerPanel = new JPanel();

content.add(northPanel, BorderLayout.NORTH);
content.add(centerPanel, BorderLayout.CENTER);

northPanel.setLayout(new GridLayout(1, 1));
centerPanel.setLayout(new GridLayout(4, 4));

northPanel.add(f1);

JButton b1 = new JButton("7");
centerPanel.add(b1);
b1.addActionListener(this);
b1.setActionCommand("7");

JButton b2 = new JButton("8");
centerPanel.add(b2);
b2.addActionListener(this);
b2.setActionCommand("8");


JButton b3 = new JButton("9");
centerPanel.add(b3);
b3.addActionListener(this);
b3.setActionCommand("9");


JButton b4 = new JButton("/");
centerPanel.add(b4);
b4.addActionListener(new FunktionsListener());
b4.setActionCommand("/");


JButton b5 = new JButton("4");
centerPanel.add(b5);
b5.addActionListener(this);
b5.setActionCommand("4");


JButton b6 = new JButton("5");
centerPanel.add(b6);
b6.addActionListener(this);
b6.setActionCommand("5");


JButton b7 = new JButton("6");
centerPanel.add(b7);
b7.addActionListener(this);
b7.setActionCommand("6");


JButton b8 = new JButton("*");
centerPanel.add(b8);
b8.addActionListener(new FunktionsListener());
b8.setActionCommand("*");


JButton b9 = new JButton("1");
centerPanel.add(b9);
b9.addActionListener(this);
b9.setActionCommand("1");


JButton b10 = new JButton("2");
centerPanel.add(b10);
b10.addActionListener(this);
b10.setActionCommand("2");


JButton b11 = new JButton("3");
centerPanel.add(b11);
b11.addActionListener(this);
b11.setActionCommand("3");


JButton b12 = new JButton("+");
centerPanel.add(b12);
b12.addActionListener(new FunktionsListener());
b12.setActionCommand("+");


JButton b13 = new JButton("=");
centerPanel.add(b13);
b13.addActionListener(new FunktionsListener());
b13.setActionCommand("rechnen");


JButton b14 = new JButton(".");
centerPanel.add(b14);
b14.addActionListener(this);
b14.setActionCommand(".");


JButton b15 = new JButton("AC");
centerPanel.add(b15);
b15.addActionListener(new FunktionsListener());
b15.setActionCommand("AC");


JButton b16 = new JButton("-");
centerPanel.add(b16);
b16.addActionListener(this);
b16.setActionCommand("-");


}

public void actionPerformed(ActionEvent event) {
f1.setText(f1.getText() + event.getActionCommand());
}

public class FunktionsListener implements ActionListener {



public void actionPerformed(ActionEvent e) {

if (e.getActionCommand().equals("+")){
zahl1 = Double.valueOf(f1.getText());
operator = '+';
f1.setText("");
}

if (e.getActionCommand().equals("-")){
zahl1 = Double.valueOf(f1.getText());
operator = '-';
f1.setText("");
}

if (e.getActionCommand().equals("/")){
zahl1 = Double.valueOf(f1.getText());
operator = '/';
f1.setText("");
}

if (e.getActionCommand().equals("*")){
zahl1 = Double.valueOf(f1.getText());
operator = '*';
f1.setText("");
}

if (e.getActionCommand().equals("AC")){
f1.setText("");
}

if (e.getActionCommand().equals("rechnen")) {
zahl2 = Double.valueOf(f1.getText());
f1.setText(berechnen(zahl1, zahl2));
}

}


public String berechnen(double c, double d){

switch (operator) {
case '+':
return addiere(c, d);
case '-':
return subtrahiere(zahl1, zahl2);
case '/':
return dividiere(zahl1, zahl2);
case '*':
return multipliziere(zahl1, zahl2);
default:
throw new RuntimeException("Ich weiß nicht, was '"+ operator +"' bedeuten soll");

}
}

public String addiere(double a, double b){
ergebnis = String.valueOf(a + b);
return ergebnis;
}

public String subtrahiere(double a, double b){
ergebnis = String.valueOf(a - b);
return ergebnis;
}

public String multipliziere(double a, double b){
ergebnis = String.valueOf(a * b);
return ergebnis;
}

public String dividiere(double a, double b){
ergebnis = String.valueOf(a / b);
return ergebnis;
}


}
}
[/Java]
 
Zuletzt bearbeitet:
Gibt deine Java-Konsole was aus?
Und wie sieht dein HTML-Code aus?


Also wenn ich es mit Eclipse starte, dann geht alles.
Im Browser kommt demm im Javabereich der Text "Fehler. Mehr per Klick"
und in der JavaConsole steht

Java-Plug-In 1.5.0_26
Verwendung der JRE-Version 1.5.0_26-b03-376-9M3263 Java HotSpot(TM) Client VM
Home-Verzeichnis des Benutzers = /Users/malte....


Mein HTML-Code sieht so aus:
HTML:
<html>
	<head>
    	<title>Test Applet</title>
    </head>
    
    <body>
    	<p align="center">
 		 <applet code="Rechner.class" width="350" height="500" alt="Java-Applets mit HTML-Farbw&auml;hler">
   		 <param name="TestText" value="SELFHTML">
 		 </applet>
		</p>
        
      </body>
</html>
 
Okay .. das Werk ist vollbracht .. ^^
Aber irgendwie kann ich es nun nicht mehr im Browser öffnen. ???:L

Komische Sache ..

Genau, was macht das Programm in deiner IDE, z.B. in Eclipse???:bahnhof:

Ausserdem, vergleiche es mal mit normalem Taschenrechner aus realen Welt, wenn du dort eine Zahl eintippst und dann Zeichen fuer Rechenoperation betaetigst und anschliessend eine weitere Zahl eingibst, wird die erste Zahl im Display wegradiert und wenn du anschliessend auf das Gleicheitszeichen drueckst, wird die zweite Zahl auch wegradiert und das Ergebnis plaziert, hast du das auch in deinem programm umgesetzt?:bahnhof:
 
Also in Eclipse funktioniert alles gut.
Habe es so ähnlich umgesetzt. Wenn ich eine Zahl eingebe und dann auf beispielsweise +
drücke, wird die Zahl ausradiert und eine neue kann eingegeben werden.

Und der Fehler im Browser sieht dann so aus.

fehler.png
 
Versuch in einem anderen Browser, Opera, Firefox etc. vielleicht braucht dein Browser als Plugin eine Java JRE ? Erst dann koennen dort Java Programme ausgefuehrt werden?:bahnhof:
 
Ich denke dein Fehler liegt hier

Java:
public class FunktionsListener implements ActionListener

public kann keine innere Klasse sein, Eclipse muss dir dies auch zeigen

und hier

Java:
b10.addActionListener(this);

warum this ?

Wo ist die Instanz des Listeners???

Java:
FunktionsListener listener= new FunktionsListener();
b10.addActionListener(listener);
 
Ich denke dein Fehler liegt hier

Java:
public class FunktionsListener implements ActionListener

public kann keine innere Klasse sein, Eclipse muss dir dies auch zeigen

und hier

Java:
b10.addActionListener(this);

warum this ?

Wo ist die Instanz des Listeners???

Java:
FunktionsListener listener= new FunktionsListener();
b10.addActionListener(listener);

Ich hab das mehr oder weniger von meinem Doc. von der Uni übernommen.
Der hat das so gemacht .. ^^

Dass die innere Klasse public ist, da hat Eclipse aber nichts gesagt .. komisch.

Werd es morgen mal ändern und schaun, ob es dann läuft.
Danke erst einmal für die viele Hilfe.
Melde mich sobald es neuigkeiten gibt 🙂
 
Ich hab das mehr oder weniger von meinem Doc. von der Uni übernommen.
Der hat das so gemacht .. ^^

Dass die innere Klasse public ist, da hat Eclipse aber nichts gesagt .. komisch.

Werd es morgen mal ändern und schaun, ob es dann läuft.
Danke erst einmal für die viele Hilfe.
Melde mich sobald es neuigkeiten gibt 🙂

Der Konstruktor hat in einem Applet auch nichts zu suchen, er wird duch Methode init() erstezt.

Kann es sein dass die Aufgabe lautete eine Applikation in Applet umzubauen???😀😀😀
 
In deinem Fehlerfenster steht doch auch: "Weitere Informationen erhalten Sie, wenn Sie auf Details klicken."
Hast du das mal gemacht? Was bekommst du dann zu lesen?
Der Java-Interpreter gibt üblicherweise immer eine Fehlermeldung aus, wenn etwas schief gegangen ist.
Ganz wichtig dafür ist, dass man auch Exceptions behandelt und nicht den body des catch-Blockes leer lässt.
 
Nein, es ist keine Aufgabe das in ein Applet umzuwandeln.
Wollte mal was machen, was man im Browser anzeigen kann.

Wenn ich auf Details klicke, dann kommt das, was in der JavaConsole steht.
Mehr leider nicht.

Aber naja, war ja jetzt quasi ein erster Versuch 😀 und wer kann schon erwarten, dass alles
gleich reibungslos funktioniert. Übung macht den Meister, oder nicht?! 😉
 
Tja, wenn das Programm in Eclipse laeuft, heist es lange noch nicht, dass es auch im Browser tut,
versuch mal so.


Java:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; 
import javax.swing.*;
  
public class TaschenrecherApplet extends JApplet implements ActionListener {  
        
	private static final long serialVersionUID = 1L;
	public static double zahl1;
    public static double zahl2;
    public static String ergebnis;
    public static char operator;
    
    public TextField f1 = new TextField();
    
    @Override
    public void init() {
      
    Container content = getContentPane();
    content.setLayout(new BorderLayout());
    content.setBackground(Color.green);
    
    JPanel northPanel = new JPanel();
    JPanel centerPanel = new JPanel();
    
    content.add(northPanel, BorderLayout.NORTH);
    content.add(centerPanel, BorderLayout.CENTER);
    
    northPanel.setLayout(new GridLayout(1, 1));
    centerPanel.setLayout(new GridLayout(4, 4));
    
    northPanel.add(f1);
    
    JButton b1 = new JButton("7");
    centerPanel.add(b1);
    b1.addActionListener(this);
    b1.setActionCommand("7");
    
    JButton b2 = new JButton("8");
    centerPanel.add(b2);
    b2.addActionListener(this);
    b2.setActionCommand("8");
    
    
    JButton b3 = new JButton("9");
    centerPanel.add(b3);
    b3.addActionListener(this);
    b3.setActionCommand("9");
    
    
    JButton b4 = new JButton("/");
    centerPanel.add(b4);
    b4.addActionListener(new FunktionsListener());
    b4.setActionCommand("/");
    
    
    JButton b5 = new JButton("4");
    centerPanel.add(b5);
    b5.addActionListener(this);
    b5.setActionCommand("4");
    
    
    JButton b6 = new JButton("5");
    centerPanel.add(b6);
    b6.addActionListener(this);
    b6.setActionCommand("5");
    
    
    JButton b7 = new JButton("6");
    centerPanel.add(b7);
    b7.addActionListener(this);
    b7.setActionCommand("6");
    
    
    JButton b8 = new JButton("*");
    centerPanel.add(b8);
    b8.addActionListener(new FunktionsListener());
    b8.setActionCommand("*");
    
    
    JButton b9 = new JButton("1");
    centerPanel.add(b9);
    b9.addActionListener(this);
    b9.setActionCommand("1");
    
    
    JButton b10 = new JButton("2");
    centerPanel.add(b10);
    b10.addActionListener(this);
    b10.setActionCommand("2");
    
    
    JButton b11 = new JButton("3");
    centerPanel.add(b11);
    b11.addActionListener(this);
    b11.setActionCommand("3");
    
    
    JButton b12 = new JButton("+");
    centerPanel.add(b12);
    b12.addActionListener(new FunktionsListener());
    b12.setActionCommand("+");
    
    
    JButton b13 = new JButton("=");
    centerPanel.add(b13);
    b13.addActionListener(new FunktionsListener());
    b13.setActionCommand("rechnen");
    
    
    JButton b14 = new JButton(".");
    centerPanel.add(b14);
    b14.addActionListener(this);
    b14.setActionCommand(".");
    
    
    JButton b15 = new JButton("AC");
    centerPanel.add(b15);
    b15.addActionListener(new FunktionsListener());
    b15.setActionCommand("AC");
    
    
    JButton b16 = new JButton("-");
    centerPanel.add(b16);
    b16.addActionListener(this);
    b16.setActionCommand("-");
    
 
  }
 
    public void actionPerformed(ActionEvent event) {
        f1.setText(f1.getText() + event.getActionCommand());
    }
    
    public class FunktionsListener implements ActionListener {
        
    
        
        public void actionPerformed(ActionEvent e) {
            
            if (e.getActionCommand().equals("+")){
                zahl1 = Double.valueOf(f1.getText());
                operator = '+';
                f1.setText("");
            }
            
            if (e.getActionCommand().equals("-")){
                zahl1 = Double.valueOf(f1.getText());
                operator = '-';
                f1.setText("");
            }
            
            if (e.getActionCommand().equals("/")){
                zahl1 = Double.valueOf(f1.getText());
                operator = '/';
                f1.setText("");
            }
            
            if (e.getActionCommand().equals("*")){
                zahl1 = Double.valueOf(f1.getText());
                operator = '*';
                f1.setText("");
            }
            
            if (e.getActionCommand().equals("AC")){
                f1.setText("");
            }
            
            if (e.getActionCommand().equals("rechnen")) {
                zahl2 = Double.valueOf(f1.getText());
                f1.setText(berechnen(zahl1, zahl2));
            }
                
        }
        
        
            public String berechnen(double c, double d){
                
                switch (operator) {
                case '+':
                    return addiere(zahl1, zahl2);
                case '-':
                    return subtrahiere(zahl1, zahl2);
                case '/':
                    return dividiere(zahl1, zahl2);
                case '*':
                    return multipliziere(zahl1, zahl2);
                default:
                    throw new RuntimeException("Ich weiß nicht, was '"+ operator +"' bedeuten soll");
                
                }
            }
            
            public String addiere(double a, double b){
                ergebnis = String.valueOf(a + b);
                return ergebnis;
            }
            
            public String subtrahiere(double a, double b){
                ergebnis = String.valueOf(a - b);
                return ergebnis;
            }
            
            public String multipliziere(double a, double b){
                ergebnis = String.valueOf(a * b);
                return ergebnis;
            }
            
            public String dividiere(double a, double b){
                ergebnis = String.valueOf(a / b);
                return ergebnis;
            }
    }
}
 

Zurück
Oben