Main.java:
package sample; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception{ Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); primaryStage.setTitle("Taschenrechner"); primaryStage.setScene(new Scene(root, 230, 280)); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
Controller.java:
package sample; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.event.ActionEvent; public class Controller { private Model tmodel = new Model(); @FXML private Button ButtonPlus; @FXML private Button ButtonMinus; @FXML private Button ButtonMal; @FXML private Button ButtonDurch; @FXML private Button ButtonEins; @FXML private Button ButtonZwei; @FXML private Button ButtonDrei; @FXML private Button ButtonVier; @FXML private Button ButtonFuenf; @FXML private Button ButtonSechs; @FXML private Button ButtonSieben; @FXML private Button ButtonAcht; @FXML private Button ButtonNeun; @FXML private Button ButtonNull; @FXML private Button ButtonGleich; @FXML private Button ButtonCE; @FXML private Button ButtonCLX; @FXML private Label Label1; public void ButtonPressed(ActionEvent event) { Button pressedButton = (Button) event.getSource(); String ButtonTag = pressedButton.getText(); int int1 = Integer.valueOf(Label1.getText()); if (String.valueOf(tmodel.getVar1()).equals("0")) { tmodel.setVar1(int1); System.out.println("var1 gesetzt:"); System.out.println(tmodel.getVar1()); } else { tmodel.setVar2(Integer.valueOf(Label1.getText())); System.out.println("var2 gesetzt:"); System.out.println(tmodel.getVar2()); tmodel.ForceExecute(ButtonTag); } Label1.setText("0"); if (ButtonTag.equals(ButtonPlus.getText())) { tmodel.setStr1("+"); } else if (ButtonTag.equals(ButtonMinus.getText())) { tmodel.setStr1("-"); } else if (ButtonTag.equals(ButtonMal.getText())) { tmodel.setStr1("*"); } else if (ButtonTag.equals(ButtonDurch.getText())) { tmodel.setStr1("/"); } Label1.setText("0"); } public void NumPressed(ActionEvent event) { Button pressedButton = (Button) event.getSource(); String ButtonTag = pressedButton.getText(); int oldNum = Integer.valueOf(Label1.getText()); int newNum = tmodel.CalcNewNum(oldNum, Integer.valueOf(ButtonTag)); Label1.setText(String.valueOf(newNum)); } public void SpecialButton(ActionEvent event) { int ergebnis = 0; Button pressedButton = (Button) event.getSource(); String ButtonTag = pressedButton.getText(); if (ButtonTag.equals("CE")) { Label1.setText(String.valueOf(Integer.valueOf(Label1.getText())/10)); } else if (ButtonTag.equals("=")) { System.out.println("ausrechnen"); tmodel.setVar2(Integer.valueOf(Label1.getText())); System.out.println("var2 gesetzt:"); System.out.println(tmodel.getVar2()); if (tmodel.getStr1().equals("+")) { ergebnis = tmodel.Addieren(); } else if (tmodel.getStr1().equals("-")) { ergebnis = tmodel.Subtrahieren(); } else if (tmodel.getStr1().equals("*")) { ergebnis = tmodel.Multiplizieren(); } else if (tmodel.getStr1().equals("/")) { ergebnis = tmodel.Dividieren(); } if (tmodel.getState() == 1) { ergebnis = tmodel.Ausrechnen(ergebnis); tmodel.setState(0); } System.out.println(ergebnis); Label1.setText(String.valueOf(ergebnis)); tmodel.setVar1(0); tmodel.setVar2(0); tmodel.setVar3(0); tmodel.setStr1(""); tmodel.setStr2(""); tmodel.setStr3(""); } else if (ButtonTag.equals("CLX")) { Label1.setText("0"); tmodel.setVar1(0); tmodel.setVar2(0); tmodel.setVar3(0); tmodel.setStr1(""); tmodel.setStr2(""); tmodel.setStr3(""); tmodel.setState(0); } } }
Model.java:
package sample; public class Model { private int var1 = 0; private int var2 = 0; private int var3 = 0; private String str1 = ""; private String str2 = ""; private String str3 = ""; private int state = 0; public int Addieren() { System.out.println("addieren"); return var1 + var2; } public int Subtrahieren() { System.out.println("subtrahieren"); return var1 - var2; } public int Multiplizieren() { System.out.println("multiplizieren"); return var1 * var2; } public int Dividieren() { System.out.println("dividieren"); return var1 / var2; } public int getVar1() { return var1; } public void setVar1(int int1) { var1 = int1; } public int getVar2() { return var2; } public void setVar2(int int1) { var2 = int1; } public int getVar3() { return var3; } public void setVar3(int int1){ var3 = int1; } public String getStr1() { return str1; } public void setStr1(String str) { str1 = str; } public String getStr2() { return str2; } public void setStr2(String str){ str2 = str; } public String getStr3() { return str3; } public void setStr3(String str){ str3 = str; } public int getState() { return state; } public void setState(int int1) { state = int1; } public int CalcNewNum (int oldNum, int preNum) { return oldNum*10+preNum; } public void ForceExecute (String ButtonTag) { if (ButtonTag.equals("+") || ButtonTag.equals("-")) { if (str1.equals("+")) { var1 = Addieren(); } else if (str1.equals("-")) { var1 = Subtrahieren(); } else if (str1.equals("*")) { var1 = Multiplizieren(); } else if (str1.equals("/")) { var1 = Dividieren(); } if (state == 1) { if (str3.equals("+")) { var1 = var3 + var1; } else if (str3.equals("-")) { var1 = var3 - var2; } state = 0; } } else if (ButtonTag.equals("*") || ButtonTag.equals("/")) { if (str1.equals("*")) { var1 = Multiplizieren(); } else if (str1.equals("/")) { var1 = Dividieren(); } else if (state == 0) { state = 1; var3 = var1; var1 = var2; var2 = 0; str3 = str1; } else if (state == 1) { if (str2.equals("+")) { var1 = Addieren(); } else if (str2.equals("-")) { var1 = Subtrahieren(); } else if (str2.equals("*")) { var1 = Multiplizieren(); } else if (str2.equals("/")) { var1 = Dividieren(); } } } str2 = ButtonTag; } public int Ausrechnen (int int1) { int ergebnis = 0; if (str3.equals("+")) { ergebnis = var3 + int1; } else if ( str3.equals("-")) { ergebnis = var3 - int1; } return ergebnis; } }
Sample.fxml:
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> <?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.GridPane?> <?import javafx.scene.layout.Pane?> <?import javafx.scene.layout.RowConstraints?> <GridPane alignment="center" hgap="10" vgap="10" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"> <columnConstraints> <ColumnConstraints /> <ColumnConstraints /> </columnConstraints> <rowConstraints> <RowConstraints /> </rowConstraints> <children> <Pane prefHeight="280.0" prefWidth="230.0"> <children> <Label fx:id="Label1" layoutX="64.0" layoutY="28.0" prefHeight="17.0" prefWidth="209.0" text="0" /> <Button fx:id="ButtonPlus" layoutX="201.0" layoutY="73.0" mnemonicParsing="false" onAction="#ButtonPressed" text="+" /> <Button fx:id="ButtonMinus" layoutX="202.0" layoutY="123.0" mnemonicParsing="false" onAction="#ButtonPressed" text="-" /> <Button fx:id="ButtonMal" layoutX="201.0" layoutY="173.0" mnemonicParsing="false" onAction="#ButtonPressed" text="*" /> <Button fx:id="ButtonDurch" layoutX="201.0" layoutY="223.0" mnemonicParsing="false" onAction="#ButtonPressed" text="/" /> <Button fx:id="ButtonDrei" layoutX="157.0" layoutY="73.0" mnemonicParsing="false" onAction="#NumPressed" text="3" /> <Button fx:id="ButtonZwei" layoutX="113.0" layoutY="73.0" mnemonicParsing="false" onAction="#NumPressed" text="2" /> <Button fx:id="ButtonEins" layoutX="68.0" layoutY="73.0" mnemonicParsing="false" onAction="#NumPressed" text="1" /> <Button fx:id="ButtonVier" layoutX="67.0" layoutY="123.0" mnemonicParsing="false" onAction="#NumPressed" text="4" /> <Button fx:id="ButtonFuenf" layoutX="113.0" layoutY="123.0" mnemonicParsing="false" onAction="#NumPressed" text="5" /> <Button fx:id="ButtonSechs" layoutX="157.0" layoutY="123.0" mnemonicParsing="false" onAction="#NumPressed" text="6" /> <Button fx:id="ButtonSieben" layoutX="68.0" layoutY="173.0" mnemonicParsing="false" onAction="#NumPressed" text="7" /> <Button fx:id="ButtonAcht" layoutX="113.0" layoutY="173.0" mnemonicParsing="false" onAction="#NumPressed" text="8" /> <Button fx:id="ButtonNeun" layoutX="157.0" layoutY="173.0" mnemonicParsing="false" onAction="#NumPressed" text="9" /> <Button fx:id="ButtonCE" layoutX="64.0" layoutY="223.0" mnemonicParsing="false" onAction="#SpecialButton" text="CE" /> <Button fx:id="ButtonNull" layoutX="113.0" layoutY="223.0" mnemonicParsing="false" onAction="#NumPressed" text="0" /> <Button fx:id="ButtonGleich" layoutX="156.0" layoutY="223.0" mnemonicParsing="false" onAction="#SpecialButton" text="=" /> <Button fx:id="ButtonCLX" layoutX="14.0" layoutY="223.0" mnemonicParsing="false" onAction="#SpecialButton" text="CLX" /> </children> </Pane> </children> </GridPane>
Vielen Dank an Florian für das zur Verfügung stellen des Codes! 🙂