import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSpinner;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;
import javax.swing.table.DefaultTableModel;
public class LoanJFrame extends JFrame implements ActionListener {
private JTextField texts[];
private JSpinner spin_year,spin_month;
private JButton btn;
private DefaultTableModel tablemodel;
public LoanJFrame() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setBounds(300, 240, 780, 400);
setBackground(Color.red);
JPanel pnl = new JPanel();
//pnl.setLayout(new FlowLayout(FlowLayout.LEFT));
String[] jlabel_str = {"贷款金额","元 贷款利率","%/月 贷款年限","年 起始年月","年","月"};
String[] jtextfield_str = {"100000","0.5025","5"};
texts = new JTextField[jtextfield_str.length];
int i =0;
for (i = 0 ; i < jtextfield_str.length; i++) {
pnl.add(new JLabel(jlabel_str[i]));
texts[i] = new JTextField(jtextfield_str[i],5);
pnl.add(texts[i]);
}
pnl.add(new JLabel(jlabel_str[i++]));
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
spin_year = new JSpinner();
spin_year.setValue(year);
pnl.add(spin_year);
pnl.add(new JLabel(jlabel_str[i++]));
int nextmonth = calendar.get(Calendar.MONTH) + 1;
nextmonth = nextmonth%12 + 1;
spin_month = new JSpinner(new SpinnerNumberModel(nextmonth, 1, 12, 1));
pnl.add(spin_month);
pnl.add(new JLabel(jlabel_str[i]));
pnl.add(btn = new JButton(" 计算 "));
btn.addActionListener(this);
getContentPane().add(pnl,"North");
String[] titles = {"年月","本金余额(元)","月还本金(元)","月还利息(元)","月还本息(元)"};
tablemodel = new DefaultTableModel(titles, 0);
JTable jtable = new JTable(tablemodel);
getContentPane().add(new JScrollPane(jtable));
setVisible(true);
}
public static void main(String[] args) {
new LoanJFrame();
}
@Override
public void actionPerformed(ActionEvent e) {
int loan_months = Integer.parseInt(texts[2].getText())*12;
int start_year = Integer.parseInt(""+spin_year.getValue());
int start_month = Integer.parseInt(""+spin_month.getValue());
double leaving = Double.parseDouble(texts[0].getText());//本金余额
double pay = leaving/loan_months;//月还本金
double rate = Double.parseDouble(texts[1].getText());//贷款利率
tablemodel.setRowCount(loan_months);
for (int i = 0; i < loan_months; i++) {
tablemodel.setValueAt(start_year+"年"+start_month+"月", i, 0);
tablemodel.setValueAt(String.format("%9.2f",leaving), i, 1);
tablemodel.setValueAt(String.format("%9.2f",pay), i, 2);
tablemodel.setValueAt(String.format("%9.2f",leaving*rate*0.01), i, 3);
tablemodel.setValueAt(String.format("%9.2f",leaving*rate*0.01 + pay), i, 4);
if(start_month==12){
start_year++;
}
start_month = start_month%12+1;
leaving -= pay;
}
}
}