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

来源:互联网 发布:韩国中国聊天软件 编辑:程序博客网 时间:2024/06/02 13:20

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

这个程序有以下关键几步:
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()));    }}
原创粉丝点击