javaFX 实现计算器[面向对象-2小时完成]

可惜放学了,明天再整理,先上张图吧:

package com.wk.view;

import com.wk.cal.CalAdd;
import com.wk.cal.CalDiv;
import com.wk.cal.CalMul;
import com.wk.cal.CalSub;
import com.wk.model.Operator;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;

/**
 * Created by suowei on 2015/10/13.
 */
public class CalcuController {
    @FXML Button btnAdd,btnSub,btnMul,btnDiv,btnClear,btnResult;
    @FXML Button btnNum1,btnNum2,btnNum3,btnNum4,btnNum5,btnNum6,btnNum7,btnNum8,btnNum9,btnNum0;
    @FXML TextField textResult = new TextField();
    String num1,num2;
    private  double n1,n2;
//    实例化计算加法的类
    private CalAdd calAdd = new CalAdd();
//    实例化计算减法的类
    private CalSub calSub = new CalSub();
//    实例化计算乘法的类
    private CalMul calMul = new CalMul();
//    实例化计算除法的类
    private CalDiv calDiv = new CalDiv();
//    定义 加减乘除四个字符串 ,  jdk 7 新特性
    final String add ="┼",sub="─",mul="×",div="÷";
//    创建一个cal_operator    作为switch语句的参数
    String cal_operator;
    public void setbtnAddAction(){
//        此方法是  用户点击+号按钮的方法,当用户点击这个按钮以后,首先要获取到用户输入的文本
        num1 = textResult.getText();
//        然后清空,以供用户第二次输入
        textResult.setText("");
//        当用户点击 = 号按钮的时候 ,  switch 语句可以知道 用户执行的是 加法  下面 减法 乘法 ,除法 类似,就不写了
        cal_operator = btnAdd.getText();
    }

    public void setBtnSubAction(){
        num1 = textResult.getText();
        textResult.setText("");
        cal_operator = btnSub.getText();
    }
    public void setBtnMulAction(){
        num1 = textResult.getText();
        textResult.setText("");
        cal_operator = btnMul.getText();
    }

    public void setBtnDivAction(){
        num1 = textResult.getText();
        textResult.setText("");
        cal_operator = btnDiv.getText();
    }

    public void setBtnClearAction(){
//        清空按钮的执行方法,没什么好说的啦 设置文本的值为空
        textResult.setText("");

    }
    public void setBtnResultAction(){
//        = 号按钮 的事件方法: 获取用户第二次输入的数字值  将他的值传递给 num2
        num2 = textResult.getText();
//        然后清空文本,当程序计算出结果以后 再显示
        textResult.setText("");
//        此方法为重中之重    当用点击 加减乘除  四个任意按钮,此方法将会检测到,并执行对应的方
        n1 = new Double(num1);
        n2 = new Double(num2);
        OperationFactory  factory  = new OperationFactory();
        factory.createOperation(cal_operator);
    }

    public void finalCaluator(String operator) {
//        实例化  计算 加减乘除  方法的参数  n1,n2, 把 用户第一次和第二次输入的值分别付给他们

 /*     switch (operator){
//            当用户选择 + 号按钮时执行的方法.  以下相似
            case add: textResult.setText(calAdd.getResult(n1,n2).toString());
                break;   //这里替换成为工厂模式,利用工厂模式来 实例化对象;
            case sub: textResult.setText(calSub.getResult(n1,n2).toString());
                break;
            case mul: textResult.setText(calMul.getResult(n1,n2).toString());
                break;
            case div: checkDivNumAction();
                textResult.setText(calDiv.getResult(n1,n2).toString());
                break;
        }*/
    }

    public void setBtnNum0Action(){
//        按钮 0 的事件
        textResult.setText(textResult.getText()+"0");
    }
    public void setBtnNum1Action(){
//        按钮 1 的事件
        textResult.setText(textResult.getText()+"1");
    }
    public void setBtnNum2Action(){
//        按钮 2 的事件
        textResult.setText(textResult.getText()+"2");
    }
    public void setBtnNum3Action() {
//        按钮 3 的事件
        textResult.setText(textResult.getText()+"3");
    }
    public void setBtnNum4Action(){
//        按钮 4 的事件
//        以下类似太累了,就不写了...
        textResult.setText(textResult.getText()+"4");
    }
    public void setBtnNum5Action(){
        textResult.setText(textResult.getText()+"5");
    }
    public void setBtnNum6Action(){
        textResult.setText(textResult.getText()+"6");
    }
    public void setBtnNum7Action(){
        textResult.setText(textResult.getText()+"7");
    }
    public void setBtnNum8Action(){
        textResult.setText(textResult.getText()+"8");
    }
    public void setBtnNum9Action() {
        textResult.setText(textResult.getText()+"9");
    }

    /**
     *  工厂一的参数传递方式决定了它只能在  -----类n内使用
     */
    class OperationFactory {
        public  Operator createOperation(String operator){
            final String add ="┼",sub="─",mul="×",div="÷";
            Operator  operator1 = null;
            switch (operator){
                case add: operator1  = new CalAdd();
                    textResult.setText(operator1.getResult(n1, n2).toString());
                    break;
                case sub: operator1  = new CalSub();
                    textResult.setText(operator1.getResult(n1,n2).toString());
                    break;
                case mul: operator1  = new CalMul();
                    textResult.setText(operator1.getResult(n1,n2).toString());
                    break;
                case div: operator1  = new CalDiv();
                    textResult.setText(operator1.getResult(n1,n2).toString());
                    break;
            }
            return operator1;
        }
    }
    /**
     *
     */
}

  这个是控制器代码,感兴趣的可以自己研究的啦..

posted @ 2015-10-14 20:28  所--谓  阅读(4219)  评论(0编辑  收藏  举报