Main:
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("Calc"); primaryStage.setScene(new Scene(root, 190, 250)); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
Model:
package sample; public class Model { int zahl=0; int speicherzahl = 0; String funktion = ""; public Model(){ System.out.println("Model initialisiert"); } private void setZahl(int neueZahl){ this.zahl = neueZahl; } private void setSpeicherzahl(int neueZahl){ this.speicherzahl = neueZahl; } public int getZahl(){ return this.zahl; } public int getSpeicherzahl(){ return this.speicherzahl; } public void zahleingabe(int number) { if (this.zahl>0) { setZahl(zahl * 10 + number); } if (this.zahl == 0){ setZahl(number); } } public void zahlruecknahme() { setZahl(this.zahl / 10); if(this.zahl==0){ this.funktion=""; } } public void machefunktion(String fkt) { if (!fkt.equals("")) { this.funktion = fkt; setSpeicherzahl(getZahl()); setZahl(0); System.out.println("funktion kapiert!"); } if (fkt.equals("")) { this.funktion = ""; setSpeicherzahl(0); } } public void berechneErgebnis(){ switch (this.funktion){ case "plus": setZahl(getZahl() + getSpeicherzahl()); break; case "minus": setZahl(getZahl() - getSpeicherzahl()); break; case "mal": setZahl(getZahl() * getSpeicherzahl()); break; case "geteilt": setZahl(getZahl() / getSpeicherzahl()); break; } } }
Controller:
package sample; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class Controller { Model tmodell = new Model(); @FXML private Button plus; @FXML private Button minus; @FXML private Button mal; @FXML private Button geteilt; @FXML private Button b1; @FXML private Button b2; @FXML private Button b3; @FXML private Button b4; @FXML private Button b5; @FXML private Button b6; @FXML private Button b7; @FXML private Button b8; @FXML private Button b9; @FXML private Button b0; @FXML private Button ce; @FXML private Button istgleichbutton; @FXML private TextField resultWindow; @FXML private Label opWindow; @FXML void istgleich(ActionEvent event) { opWindow.setText(opWindow.getText() + " " + tmodell.getZahl() + " ="); tmodell.berechneErgebnis(); zahlausgabe(); } @FXML void funktionButton(ActionEvent event) { Button Gedrueckt = (Button) event.getSource(); System.out.println(Gedrueckt); String Buttonschrift = Gedrueckt.getText(); System.out.println(Buttonschrift); String welcherButton = Gedrueckt.getId(); System.out.println(welcherButton); tmodell.machefunktion(welcherButton); opWindow.setText(String.valueOf(tmodell.getSpeicherzahl()) + " " + Buttonschrift); } @FXML void reset(ActionEvent event) { tmodell.zahlruecknahme(); zahlausgabe(); } @FXML void zahlEingeben(ActionEvent event) { Button Gedrueckt = (Button) event.getSource(); String welcherButton = Gedrueckt.getId(); int number = Integer.valueOf(welcherButton.substring(1,2)); tmodell.zahleingabe(number); zahlausgabe(); } void zahlausgabe(){ resultWindow.setText(String.valueOf(tmodell.getZahl())); } }
Sample.fxml:
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.geometry.Point3D?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.Label?> <?import javafx.scene.control.TextField?> <?import javafx.scene.layout.AnchorPane?> <?import javafx.scene.layout.ColumnConstraints?> <?import javafx.scene.layout.GridPane?> <?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> <rowConstraints> <RowConstraints /> </rowConstraints> <children> <AnchorPane prefHeight="250.0" prefWidth="190.0"> <children> <Button fx:id="plus" layoutX="20.0" layoutY="78.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#funktionButton" prefHeight="30.0" prefWidth="30.0" text="+" /> <Button fx:id="minus" layoutX="59.0" layoutY="78.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#funktionButton" prefHeight="30.0" prefWidth="30.0" text="-" /> <Button fx:id="mal" layoutX="99.0" layoutY="78.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#funktionButton" prefHeight="30.0" prefWidth="30.0" text="*" /> <Button fx:id="geteilt" layoutX="139.0" layoutY="78.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#funktionButton" prefHeight="30.0" prefWidth="30.0" text=":" /> <Button fx:id="b1" layoutX="20.0" layoutY="118.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#zahlEingeben" prefHeight="30.0" prefWidth="30.0" text="1" /> <Button fx:id="b2" layoutX="59.0" layoutY="118.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#zahlEingeben" prefHeight="30.0" prefWidth="30.0" text="2" /> <Button fx:id="b3" layoutX="99.0" layoutY="118.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#zahlEingeben" prefHeight="30.0" prefWidth="30.0" text="3" /> <Button fx:id="b4" layoutX="139.0" layoutY="118.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#zahlEingeben" prefHeight="30.0" prefWidth="30.0" text="4" /> <Button fx:id="b5" layoutX="20.0" layoutY="158.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#zahlEingeben" prefHeight="30.0" prefWidth="30.0" text="5"> <rotationAxis> <Point3D x="-3.0" z="1.0" /> </rotationAxis> </Button> <Button fx:id="b6" layoutX="59.0" layoutY="158.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#zahlEingeben" prefHeight="30.0" prefWidth="30.0" text="6"> <rotationAxis> <Point3D x="-3.0" z="1.0" /> </rotationAxis> </Button> <Button fx:id="b7" layoutX="99.0" layoutY="158.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#zahlEingeben" prefHeight="30.0" prefWidth="30.0" text="7"> <rotationAxis> <Point3D x="-3.0" z="1.0" /> </rotationAxis> </Button> <Button fx:id="b8" layoutX="139.0" layoutY="158.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#zahlEingeben" prefHeight="30.0" prefWidth="30.0" text="8"> <rotationAxis> <Point3D x="-3.0" z="1.0" /> </rotationAxis> </Button> <Button fx:id="b9" layoutX="20.0" layoutY="198.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#zahlEingeben" prefHeight="30.0" prefWidth="30.0" text="9" /> <Button fx:id="b0" layoutX="59.0" layoutY="198.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#zahlEingeben" prefHeight="30.0" prefWidth="30.0" text="0" /> <Button fx:id="ce" layoutX="99.0" layoutY="198.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#reset" prefHeight="30.0" prefWidth="30.0" text="ce" /> <Button fx:id="istgleichbutton" layoutX="139.0" layoutY="198.0" maxHeight="30.0" maxWidth="30.0" minHeight="30.0" minWidth="30.0" mnemonicParsing="false" onAction="#istgleich" prefHeight="30.0" prefWidth="30.0" text="=" /> <TextField fx:id="resultWindow" alignment="CENTER_RIGHT" layoutX="21.0" layoutY="43.0" promptText="0" /> <Label fx:id="opWindow" alignment="CENTER_RIGHT" contentDisplay="RIGHT" layoutX="21.0" layoutY="20.0" prefHeight="17.0" prefWidth="149.0" text=" " /> </children> </AnchorPane> </children> </GridPane>