Achtung, sehr großer Beitrag:
Hallo Community,
ich habe mich an einem Taschenrechner in Kombination mit JavaFx versucht. Das UI habe ich mit dem Scenebuilder erstellt, und im Nachhinein den Rest mit Eclipse programmiert. Nun bekomme ich jede Menge Exceptions, und ich sitze schon einige Zeit daran den/die Fehler zu finden. Da ich jedoch noch ein Anfänger bin, kann es gut sein dass ich etwas wichtiges übersehen habe, aber darum ist dieses Forum doch da ;-).
Hier der Code von der Main-Klasse:
Hier von der Model-Klasse:
Hier von der Controller-Klasse:
Und hier noch von der UI:
Die Logik hinter dem Taschenrechner habe ich mit einem Konsolen Programm getestet:
Falls jemand was mit den Exceptions anfangen kann:
https://pastebin.com/kaDdtNzw
So, das wärs, hoffentlich kann mir jemand helfen.
Und schon im voraus einen RIESEN Dank an denjenigen, der sich allein die Mühe gemacht hat, sich das alles hier durchzulesen.
PS: Ich weiß dass einige sehr wichtige Dinge wie zum Beispiel die Division durch 0 noch berücksichtigt werden müssen, mir ging es am Anfang jedoch nur darum dass ich einfach Dinge wie 75248+7464-84662 ausrechnen kann.
Mfg Itssimsch
Hallo Community,
ich habe mich an einem Taschenrechner in Kombination mit JavaFx versucht. Das UI habe ich mit dem Scenebuilder erstellt, und im Nachhinein den Rest mit Eclipse programmiert. Nun bekomme ich jede Menge Exceptions, und ich sitze schon einige Zeit daran den/die Fehler zu finden. Da ich jedoch noch ein Anfänger bin, kann es gut sein dass ich etwas wichtiges übersehen habe, aber darum ist dieses Forum doch da ;-).
Hier der Code von der Main-Klasse:
Code:
package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Parent root = FXMLLoader.load(getClass().getResource("UI.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
Hier von der Model-Klasse:
Code:
package application;
public class Model {
public double calculate(double base, double input, String operation) {
double zwischenergebnis=0;
switch(operation) {
case "+": zwischenergebnis = base + input;break;
case "-": zwischenergebnis = base - input;break;
case "/": zwischenergebnis = base / input;break;
case "*": zwischenergebnis = base * input;break;
}
return zwischenergebnis;
}
public double secondCalculate(Double zwischenergebnis,double input, String operation) {
switch(operation) {
case "+": zwischenergebnis = zwischenergebnis + input;break;
case "-": zwischenergebnis = zwischenergebnis - input;break;
case "/": zwischenergebnis = zwischenergebnis / input;break;
case "*": zwischenergebnis = zwischenergebnis * input;break;
}
return zwischenergebnis;
}
}
Hier von der Controller-Klasse:
Code:
package application;
import javafx.scene.control.*;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.text.Text;
public class Controller {
@FXML
public static Text result;
public static Double c_base;
public static Double c_input;
public static double base;
public static double input;
public static Double zwischenergebnis;
public static String operation = "";
public static String value;
Model model = new Model();
public void baseNumberTapped(ActionEvent event) {
//Cases vor erster berechnung
if(c_base==null && zwischenergebnis==null) {
value = ((Button)(event.getSource())).getText();
c_base = Double.parseDouble(value);
result.setText(value);
}
else if(c_base != null&&zwischenergebnis==null){
value = ((Button)(event.getSource())).getText();
c_input = Double.parseDouble(value);
result.setText(value);
}
else if(c_input != null&&zwischenergebnis==null) {
base=c_base;
input=c_input;
zwischenergebnis = model.calculate(base, input, operation);
c_base=null;
c_input=null;
}
//Cases nach erster Berechnung
else if(zwischenergebnis != null) {
value = ((Button)(event.getSource())).getText();
input = Double.parseDouble(value);
zwischenergebnis = model.secondCalculate(zwischenergebnis, input, operation);
}
}
public void operatorTapped(ActionEvent event) {
operation = ((Button)(event.getSource())).getText();
}
public void equalsTapped(ActionEvent event) {
result.setText(String.valueOf(zwischenergebnis));
}
public void clearTapped(ActionEvent event) {
result=null;
c_base=null;
c_input=null;
zwischenergebnis=null;
operation = "";
value=null;
}
}
Code:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="400.0" spacing="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
<children>
<StackPane prefHeight="80.0" prefWidth="400.0">
<children>
<Text fx:id="result" strokeType="OUTSIDE" strokeWidth="0.0" text="0" textAlignment="RIGHT" wrappingWidth="393.5625">
<font>
<Font size="40.0" />
</font>
</Text>
</children>
</StackPane>
<HBox alignment="TOP_CENTER" prefHeight="50.0" prefWidth="300.0" spacing="20.0">
<children>
<Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="7">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="8">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="9">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#operatorTapped" prefHeight="50.0" prefWidth="80.0" text="+">
<font>
<Font size="30.0" />
</font>
</Button>
</children>
</HBox>
<HBox alignment="TOP_CENTER" prefHeight="50.0" prefWidth="300.0" spacing="20.0">
<children>
<Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="4">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="5">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="6">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#operatorTapped" prefHeight="50.0" prefWidth="80.0" text="-">
<font>
<Font size="30.0" />
</font>
</Button>
</children>
</HBox>
<HBox alignment="TOP_CENTER" prefHeight="50.0" prefWidth="300.0" spacing="20.0">
<children>
<Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="1">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="2">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="3">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#operatorTapped" prefHeight="50.0" prefWidth="80.0" text="*">
<font>
<Font size="30.0" />
</font>
</Button>
</children>
</HBox>
<HBox alignment="TOP_CENTER" prefHeight="50.0" prefWidth="300.0" spacing="20.0">
<children>
<Button mnemonicParsing="false" onAction="#clearTapped" prefHeight="50.0" prefWidth="80.0" text="C">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="0">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#equalsTapped" prefHeight="50.0" prefWidth="80.0" text="=">
<font>
<Font size="30.0" />
</font>
</Button>
<Button mnemonicParsing="false" onAction="#operatorTapped" prefHeight="50.0" prefWidth="80.0" text="/">
<font>
<Font size="30.0" />
</font>
</Button>
</children>
</HBox>
</children>
</VBox>
Die Logik hinter dem Taschenrechner habe ich mit einem Konsolen Programm getestet:
Code:
import javax.swing.JOptionPane;
public class Main {
public static int zwischenergebnis;
public static void main (String[]args) {
while(true) {
String s = javax.swing.JOptionPane.showInputDialog("Input");
int eingabe = Integer.parseInt(s);
String operation = JOptionPane.showInputDialog("Operation");
String d = JOptionPane.showInputDialog("Nächster Input");
int k = Integer.parseInt(d);
switch(operation) {
case "+": zwischenergebnis = eingabe + k;break;
case "-": zwischenergebnis = eingabe - k;break;
case "/": zwischenergebnis = eingabe / k;break;
case "*": zwischenergebnis = eingabe * k;break;
}
int j =JOptionPane.showConfirmDialog(null, "Weiter?");
if(j==0) {
while(true) {
operation = JOptionPane.showInputDialog("Operation");
d = JOptionPane.showInputDialog("Nächster Input");
k = Integer.parseInt(d);
switch(operation) {
case "+": zwischenergebnis = zwischenergebnis + k;break;
case "-": zwischenergebnis = zwischenergebnis - k;break;
case "/": zwischenergebnis = zwischenergebnis / k;break;
case "*": zwischenergebnis = zwischenergebnis * k;break;
}
j =JOptionPane.showConfirmDialog(null, "Weiter?");
if(j==1) {
break;
}
}
break;
}
else if(j==1) {
break;
}
}
System.out.println(zwischenergebnis);
}
}
Falls jemand was mit den Exceptions anfangen kann:
https://pastebin.com/kaDdtNzw
So, das wärs, hoffentlich kann mir jemand helfen.
Und schon im voraus einen RIESEN Dank an denjenigen, der sich allein die Mühe gemacht hat, sich das alles hier durchzulesen.
PS: Ich weiß dass einige sehr wichtige Dinge wie zum Beispiel die Division durch 0 noch berücksichtigt werden müssen, mir ging es am Anfang jedoch nur darum dass ich einfach Dinge wie 75248+7464-84662 ausrechnen kann.
Mfg Itssimsch
Zuletzt bearbeitet: