Advertisement
Guest User

Untitled

a guest
Oct 27th, 2016
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.42 KB | None | 0 0
  1. /****************************************************FxCalc**********************
  2. package application;
  3.  
  4. import javafx.application.Application;
  5. import javafx.beans.binding.Bindings;
  6. import javafx.beans.property.*;
  7. import javafx.event.ActionEvent;
  8. import javafx.fxml.*;
  9. import javafx.stage.Stage;
  10. import javafx.scene.*;
  11. import javafx.scene.control.*;
  12.  
  13. public class FxCalc extends Application {
  14.       @FXML
  15.       private TextField display;
  16.       @FXML
  17.       private BooleanProperty disabledButtons = new SimpleBooleanProperty(false);
  18.       private DoubleProperty fontSize = new SimpleDoubleProperty(10);
  19.      
  20.       private double accumulator;
  21.       private double equalityDefaultNumber;
  22.       private double percent;
  23.       private double numberToCountPercent;
  24.    
  25.       private String operator;
  26.      
  27.       private boolean wasNumber;
  28.       private boolean wasEquality;
  29.       private boolean wasPercent;
  30.      
  31.       public FxCalc() {
  32.           accumulator = 0.0;
  33.           equalityDefaultNumber = 0.0;
  34.           percent = 0.0;
  35.           numberToCountPercent = 0.0;
  36.           operator = "";
  37.           wasNumber = false;
  38.           wasEquality = false;
  39.           wasPercent = false;
  40.       }
  41.       @FXML
  42.       public void initialize() {
  43.           display.setText("0");
  44.       }
  45.      
  46.       public final boolean getDisabledButtons() {
  47.           return disabledButtons.get();
  48.       }
  49.      
  50.       public final void setDisabledButtons(boolean value) {
  51.           disabledButtons.set(value);
  52.       }
  53.      
  54.       public BooleanProperty disabledButtonsProperty() {
  55.           return disabledButtons;
  56.       }
  57.      
  58.       @Override
  59.       public void start(Stage primaryStage) {
  60.         try {
  61.           Parent root = FXMLLoader.load(getClass()
  62.                                   .getResource("fxcalc.fxml"));
  63.           Scene scene = new Scene(root,400,400);
  64.           scene.getStylesheets().add(getClass()
  65.                .getResource("fxscene.css").toExternalForm());
  66.           primaryStage.setScene(scene);
  67.           primaryStage.setTitle("Scene Buildered");
  68.          
  69.           primaryStage.setMaxHeight(600);
  70.           primaryStage.setMaxWidth(600);
  71.           primaryStage.setMinHeight(200);
  72.           primaryStage.setMinWidth(200);
  73.          
  74.           fontSize.bind(scene.heightProperty().add(scene.widthProperty()).divide(50));
  75.           for(Node node: root.getChildrenUnmodifiable())
  76.               if(node instanceof Button) {
  77.                   Button button = (Button) node;
  78.                   button.styleProperty().bind(Bindings.concat("-fx-font-size: ", fontSize.asString(), ";"));
  79.               }
  80.          
  81.           primaryStage.show();
  82.         } catch(Exception e) {
  83.           e.printStackTrace();
  84.         }
  85.       }
  86.       @FXML
  87.       public void Click(ActionEvent event) {
  88.         String buttonValue = ((Button)event.getSource()).getText();
  89.         String number;
  90.        
  91.         switch(buttonValue) {
  92.             case "+/-":
  93.                 number = display.getText();
  94.                 if(number.substring(0, 1).equals("-"))
  95.                     display.setText(number.substring(1));
  96.                 else
  97.                     display.setText("-" + number);
  98.                 break;
  99.             case "+":
  100.             case "-":
  101.             case "/":
  102.             case "*":
  103.                 if(wasNumber) {
  104.                     equalityDefaultNumber = Double.parseDouble(display.getText());
  105.                     accumulator = calculate(accumulator, operator, equalityDefaultNumber);
  106.                     display.setText(String.valueOf(accumulator));
  107.                 } else
  108.                     accumulator = Double.parseDouble(display.getText());
  109.                 operator = buttonValue;
  110.                 wasNumber = false;
  111.                 wasPercent = false;
  112.                 wasEquality = false;
  113.                 break;
  114.             case "C":
  115.                 display.setText("0.0");
  116.                 accumulator = 0.0;
  117.                 equalityDefaultNumber = 0.0;
  118.                 percent = 0.0;
  119.                 numberToCountPercent = 0.0;
  120.                 operator = "";
  121.                 wasNumber = false;
  122.                 wasEquality = false;
  123.                 wasPercent = false;
  124.                 setDisabledButtons(false);
  125.                 break;
  126.             case "sqrt":
  127.                 number = display.getText();
  128.                 if(number.substring(0, 1).equals("-")) {
  129.                     display.setText("ERR");
  130.                     setDisabledButtons(true);
  131.                 }
  132.                 else
  133.                     display.setText(String.valueOf(Math.sqrt(Double.parseDouble(number))));
  134.                 wasNumber = false;
  135.                 wasPercent = false;
  136.                 break;
  137.             case "%":
  138.                 if(wasPercent)
  139.                     percent = percent / 2;
  140.                 else {
  141.                     percent = Double.parseDouble(display.getText());
  142.                     numberToCountPercent = accumulator;
  143.                 }
  144.                 accumulator = calculate(numberToCountPercent, "*", percent / 100);
  145.                 display.setText(String.valueOf(accumulator));
  146.                 wasPercent = true;
  147.                 wasNumber = false;
  148.                 break;
  149.             case "=":
  150.                 if(wasNumber)
  151.                     equalityDefaultNumber = Double.parseDouble(display.getText());
  152.                 accumulator = calculate(accumulator, operator, equalityDefaultNumber);
  153.                 if(accumulator == -1)
  154.                     break;
  155.                 display.setText(String.valueOf(accumulator));
  156.                 wasNumber = false;
  157.                 wasEquality = true;
  158.                 wasPercent = false;
  159.                 break;
  160.             case ".":
  161.                 if(display.getText().equals("0.0") || wasEquality || wasPercent) {
  162.                     display.clear();
  163.                     display.appendText("0");
  164.                 }
  165.                 if(display.getText().contains("."))
  166.                     break;
  167.                 display.appendText(buttonValue);
  168.                 wasNumber = true;
  169.                 wasPercent = false;
  170.                 wasEquality = false;
  171.                 break;
  172.             // number
  173.             default:
  174.                 if(wasEquality) {
  175.                     wasEquality = false;
  176.                     operator = "";
  177.                 }
  178.                 if(!wasNumber) {
  179.                     wasNumber = true;
  180.                     display.clear();
  181.                 }
  182.                 display.appendText(buttonValue);
  183.         }
  184.       }
  185.      
  186.       private double calculate(double number1, String operator, double number2) {
  187.           switch(operator) {
  188.             case "+":
  189.                 return number1 + number2;
  190.             case "-":
  191.                 return number1 - number2;
  192.             case "*":
  193.                 return number1 * number2;
  194.             case "/":
  195.                 if (number2 != 0)
  196.                     return number1 / number2;
  197.                 else {
  198.                     display.setText("ERR");
  199.                     setDisabledButtons(true);
  200.                     return -1;
  201.                 }
  202.             default:
  203.                 return number2;
  204.           }
  205.       }
  206.      
  207.       public static void main(String[] args) {
  208.         launch(args);
  209.       }
  210.     }
  211. *******************************fxscene.css********************************/
  212. .root {
  213. -fx-font-size: 26px;
  214. -fx-background-color: #C0C0C0;
  215. }
  216. .button {
  217. -fx-background-radius: 5%;
  218. -fx-font-size: 20px;
  219. -fx-max-width: 2000px;
  220. -fx-max-height: 2000px;
  221. -fx-text-fill: #000033;
  222. -fx-background-color:
  223.         linear-gradient(from 0% 90% to 0% 100%, #A0A0A0 0%, #808080 100%),
  224.         #A0A0A0,
  225.         #E0E0E0,
  226.         radial-gradient(center 50% 50%, radius 100%, #E0E0E0, #C0C0C0);
  227. }
  228.  
  229. .button:hover {
  230.     -fx-effect: innershadow(gaussian, #404040, 50, 0, 5, 5);
  231. }
  232. /************************************fxcalc.fxml*****************************************************/
  233. <?xml version="1.0" encoding="UTF-8"?>
  234.  
  235. <?import javafx.scene.control.*?>
  236. <?import java.lang.*?>
  237. <?import javafx.scene.layout.*?>
  238. <?import javafx.scene.layout.GridPane?>
  239.  
  240. <GridPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.FxCalc">
  241.    <columnConstraints>
  242.       <ColumnConstraints hgrow="ALWAYS" />
  243.       <ColumnConstraints hgrow="ALWAYS" />
  244.       <ColumnConstraints hgrow="ALWAYS" />
  245.       <ColumnConstraints hgrow="ALWAYS" />
  246.       <ColumnConstraints hgrow="ALWAYS" />
  247.    </columnConstraints>
  248.    <rowConstraints>
  249.       <RowConstraints vgrow="ALWAYS" />
  250.       <RowConstraints vgrow="ALWAYS" />
  251.       <RowConstraints vgrow="ALWAYS" />
  252.       <RowConstraints vgrow="ALWAYS" />
  253.       <RowConstraints vgrow="ALWAYS" />
  254.    </rowConstraints>
  255.    <children>
  256.       <Button mnemonicParsing="false" onAction="#Click" text="C" GridPane.columnIndex="4" />
  257.       <Button mnemonicParsing="false" onAction="#Click" text="sqrt" GridPane.columnIndex="4" GridPane.rowIndex="1" disable="${controller.disabledButtons}" />
  258.       <Button mnemonicParsing="false" onAction="#Click" text="/" GridPane.columnIndex="3" GridPane.rowIndex="1" disable="${controller.disabledButtons}" />
  259.       <Button mnemonicParsing="false" onAction="#Click" text="\%" GridPane.columnIndex="4" GridPane.rowIndex="2" disable="${controller.disabledButtons}" />
  260.       <Button mnemonicParsing="false" onAction="#Click" text="*" GridPane.columnIndex="3" GridPane.rowIndex="2" disable="${controller.disabledButtons}" />
  261.       <Button mnemonicParsing="false" onAction="#Click" text="=" GridPane.columnIndex="4" GridPane.rowIndex="3" GridPane.rowSpan="2" disable="${controller.disabledButtons}" />
  262.       <Button mnemonicParsing="false" onAction="#Click" text="-" GridPane.columnIndex="3" GridPane.rowIndex="3" disable="${controller.disabledButtons}" />
  263.       <Button mnemonicParsing="false" onAction="#Click" text="9" GridPane.columnIndex="2" GridPane.rowIndex="1" disable="${controller.disabledButtons}" />
  264.       <Button mnemonicParsing="false" onAction="#Click" text="6" GridPane.columnIndex="2" GridPane.rowIndex="2" disable="${controller.disabledButtons}" />
  265.       <Button mnemonicParsing="false" onAction="#Click" text="3" GridPane.columnIndex="2" GridPane.rowIndex="3" disable="${controller.disabledButtons}" />
  266.       <Button mnemonicParsing="false" onAction="#Click" text="8" GridPane.columnIndex="1" GridPane.rowIndex="1" disable="${controller.disabledButtons}" />
  267.       <Button mnemonicParsing="false" onAction="#Click" text="5" GridPane.columnIndex="1" GridPane.rowIndex="2" disable="${controller.disabledButtons}" />
  268.       <Button mnemonicParsing="false" onAction="#Click" text="2" GridPane.columnIndex="1" GridPane.rowIndex="3" disable="${controller.disabledButtons}" />
  269.       <Button mnemonicParsing="false" onAction="#Click" text="+" GridPane.columnIndex="3" GridPane.rowIndex="4" disable="${controller.disabledButtons}" />
  270.       <Button mnemonicParsing="false" onAction="#Click" text="+/-" GridPane.columnIndex="2" GridPane.rowIndex="4" disable="${controller.disabledButtons}" />
  271.       <Button mnemonicParsing="false" onAction="#Click" text="." GridPane.columnIndex="1" GridPane.rowIndex="4" disable="${controller.disabledButtons}" />
  272.       <Button mnemonicParsing="false" onAction="#Click" text="7" GridPane.rowIndex="1" disable="${controller.disabledButtons}" />
  273.       <Button mnemonicParsing="false" onAction="#Click" text="4" GridPane.rowIndex="2" disable="${controller.disabledButtons}" />
  274.       <Button mnemonicParsing="false" onAction="#Click" text="1" GridPane.rowIndex="3" disable="${controller.disabledButtons}" />
  275.       <Button mnemonicParsing="false" onAction="#Click" text="0" GridPane.rowIndex="4" disable="${controller.disabledButtons}" />
  276.       <TextField fx:id="display" GridPane.columnSpan="4" />
  277.    </children>
  278. </GridPane>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement