贷款计算器运行结果如下:
这个程序有以下关键几步:
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()));
}
}