我写的代码AmortizationLoanSchedule
在Swing,但外观并不好。 如何调整标签,文本字段和按钮的大小?
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
public class AmortizationLoanSchedule extends JApplet implements ActionListener {
private JLabel LoanAmount = new JLabel("Loan Amount");
private JLabel NumberOfYears = new JLabel("Number Of Years");
private JLabel InterestRate = new JLabel("Interest Rate (Annual)");
private JTextField jtfLoanAmount = new JTextField(10);
private JTextField jtfNumberOfYears = new JTextField(10);
private JTextField jtfInterestRate = new JTextField(10);
// Calculate button is also needed
private JButton jbtCalculate = new JButton("Amortize Loan");
// ...and a text area where the results will be displayed
private JTextArea jtaResults = new JTextArea();
public void init() {
try {
// Panel p1 will hold the input
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(3, 3));
p1.add(LoanAmount);
p1.add(jtfLoanAmount);
p1.add(NumberOfYears);
p1.add(jtfNumberOfYears);
p1.add(InterestRate);
p1.add(jtfInterestRate);
// Panel p2 will hold panel p1 and the calculate button
JPanel p2 = new JPanel();
p2.setLayout(new BorderLayout());
p2
.setBorder(new TitledBorder(
"Enter loan amount, Number of years and annual interest rate"));
p2.add(p1, BorderLayout.BEFORE_FIRST_LINE);
p2.add(jbtCalculate, BorderLayout.AFTER_LAST_LINE);
// Action listener for the button
jbtCalculate.addActionListener(this);
// Make the text area scrollable and uneditable
JScrollPane scrollPane = new JScrollPane(jtaResults);
jtaResults.setRows(12);
jtaResults.setEditable(false);
// Place the two panels to the applet
getContentPane().add(p2, BorderLayout.NORTH);
getContentPane().add(scrollPane, BorderLayout.SOUTH);
} catch (Exception e) {
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jbtCalculate)
calculateLoan();
else
System.out.println("you will never see this text!");
}
public void calculateLoan() {
if ((jtfNumberOfYears.getText().equals(""))
|| (jtfLoanAmount.getText().equals(""))
|| (jtfInterestRate.getText().equals(""))) {
JOptionPane.showMessageDialog(null, "All fields are mandatory",
null, 1);
} else {
int numberOfYears = Integer.parseInt(jtfNumberOfYears.getText());
double loanAmount = Double.parseDouble(jtfLoanAmount.getText());
double annualInterestRate = (Double.parseDouble(jtfInterestRate
.getText())) / 100;
double monthlyInterestRate = annualInterestRate / 12;
double numberOfMonths = numberOfYears * 12;
double monthlyPayment = loanAmount
* (monthlyInterestRate / (1 - Math.pow(
1 + monthlyInterestRate, -numberOfMonths)));
double totalPayment = monthlyPayment * numberOfMonths;
double balance = loanAmount;
double interest;
double principal;
jtaResults.append("Payment#\t" + "Interest\t" + "Principal\t"
+ "Balance\n\n");
for (int i = 0; i < numberOfYears * 12; i++) {
interest = (int) (monthlyInterestRate * balance * 100) / 100.0;
principal = (int) ((monthlyPayment - interest) * 100) / 100.0;
balance = (int) ((balance - principal) * 100) / 100.0;
jtaResults.append(i + 1 + "\t" + interest + "\t" + principal
+ "\t" + balance + "\n");
}
jtaResults.append("\n\nMonthly Payment: $"
+ (int) (monthlyPayment * 100) / 100.0 + "\n");
jtaResults.append("Total Payment: $" + (int) (totalPayment * 100)
/ 100.0 + "\n\n");
}
}
}
更新
这是需要什么。