采用事件驱动编程以及GUI组件开发一个贷款计算器

贷款计算器运行结果如下:
这里写图片描述

这个程序有以下关键几步:
1)创建一个GridPane,添加标签、文本域和按钮到面板中。
a)创建一个GridPane,添加标签、文本域和按钮到面板中。
b)将按钮设置为右侧对齐。
2)处理事件。
创建并注册一个处理器,用于处理按键单击的动作时间。处理器获得用户输入的贷款、利率和年数。计算月支付额和总支付额,并将值显示在文本域中。

首先要设计一个Loan贷款类

Loan类包含两个构造方法、四个get方法、三个set方法、以及求月偿还额和总偿还额的方法。可以通过使用无参构造方法或者带三个参数(年利率、年数和贷款额)的构造方法来构造一个Loan对象。当创建一个贷款对象时,它的数据存储在loanDate域中,getLoanDate方法返回日期。程序如下:

package com.company;

import java.util.Date;

public class Loan
{
    private double annualInterestRate;
    private int numberOfYears;
    private double loanAmout;
    private java.util.Date loanDate;

    public Loan(){this(2.5,1,1000);}

    public Loan(double annualInterestRate,int numberOfYears,double loanAmout)
    {
        this.annualInterestRate=annualInterestRate;
        this.numberOfYears=numberOfYears;
        this.loanAmout=loanAmout;
        loanDate=new java.util.Date();
    }

    public double getAnnualInterestRate() {
        return annualInterestRate;
    }

    public void setAnnualInterestRate(double annualInterestRate)
    {
        this.annualInterestRate=annualInterestRate;
    }

    public int getNumberOfYears()
    {
        return numberOfYears;
    }

    public void setNumberOfYears(int numberOfYears)
    {
        this.numberOfYears=numberOfYears;
    }

    public double getLoanAmout()
    {
        return loanAmout;
    }

    public void setLoanAmout(double loanAmout)
    {
        this.loanAmout=loanAmout;
    }

    public double getMothlyPayment()
    {
        double monthlyInterestRate=annualInterestRate/1200;
        double monthlyPayment=loanAmout*monthlyInterestRate/(1-(1/Math.pow(1+monthlyInterestRate,numberOfYears*12)));
        return monthlyPayment;
    }

    public double getTotalPayment()
    {
        double totalPayment=getMothlyPayment()*12*numberOfYears;
        return totalPayment;
    }

    public java.util.Date getLoanDate()
    {
        return loanDate;
    }
}

然后就是就用Loan类中的方法计算贷款

进行事件驱动编程以及GUI组件,完整代码如下:

package com.company;

import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class LoanCalculator extends Application {
    private TextField tfAnnualInterestRate=new TextField();
    private TextField tfNumberOfYears=new TextField();
    private TextField tfLoanAmount=new TextField();
    private TextField tfMonthlyPayment=new TextField();
    private TextField tfTotalPayment=new TextField();
    private Button btCalculator=new Button("Calculator");

    @Override
    public void start(Stage primaryStage) {
        GridPane gridPane=new GridPane();

        gridPane.setHgap(5);
        gridPane.setVgap(5);
        gridPane.add(new Label("Annual Interest Rate:"),0,0);
        gridPane.add(tfAnnualInterestRate,1,0);
        gridPane.add(new Label("Number Of Years:"),0,1);
        gridPane.add(tfNumberOfYears,1,1);
        gridPane.add(new Label("Loan Amount:"),0,2);
        gridPane.add(tfLoanAmount,1,2);
        gridPane.add(new Label("Monthly Payment"),0,3);
        gridPane.add(tfMonthlyPayment,1,3);
        gridPane.add(new Label("Total Payment"),0,4);
        gridPane.add(tfTotalPayment,1,4);
        gridPane.add(btCalculator,1,5);

        gridPane.setAlignment(Pos.CENTER);
        tfAnnualInterestRate.setAlignment(Pos.BOTTOM_RIGHT);
        tfNumberOfYears.setAlignment(Pos.BOTTOM_RIGHT);
        tfLoanAmount.setAlignment(Pos.BOTTOM_RIGHT);
        tfMonthlyPayment.setAlignment(Pos.BOTTOM_RIGHT);
        tfTotalPayment.setAlignment(Pos.BOTTOM_RIGHT);
        tfMonthlyPayment.setEditable(false);
        tfTotalPayment.setEditable(false);
        GridPane.setHalignment(btCalculator, HPos.RIGHT);
        //创建一个处理器并和按键进行注册
        btCalculator.setOnAction(e -> calculateLoanPayment());

        Scene scene=new Scene(gridPane,400,250);
        primaryStage.setTitle("LoanCalculator");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private void calculateLoanPayment() {
        //调用getText方法返回文本域中的字符串文本
        double interest=Double.parseDouble(tfAnnualInterestRate.getText());
        int year=Integer.parseInt(tfNumberOfYears.getText());
        double loanAmount=Double.parseDouble(tfLoanAmount.getText());
        Loan loan=new Loan(interest,year,loanAmount);
        //用String.format方法用来将数字格式化成希望的格式,并将其作为字符串返回
        tfMonthlyPayment.setText(String.format("$%.2f",loan.getMothlyPayment()));
        tfTotalPayment.setText(String.format("$%.2f",loan.getTotalPayment()));
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值