1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
| public static void main(String[] args) {
JFrame frame = new JFrame("Calculateur de remboursement"); // nom de la frame
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new GridBagLayout());
Insets insets = new Insets(5,5,5,5); //Espacement des JTextField
GridBagConstraints constraintsLabel = new GridBagConstraints(0, 0, 1, 1, 0, 0, GridBagConstraints.BASELINE_TRAILING, GridBagConstraints.NONE, insets, 0, 0);
GridBagConstraints constraintsField = new GridBagConstraints(1, 0, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, insets, 0, 0);
String[] labels = {"Quel est le montant de l'emprunt ? ", "Quel est le taux d'interêt ? ", "Nombre d'années de remboursement ? ", "Vos remboursements mensuels se montent à: "};
for(String label : labels) {
panel.add(new JLabel(label), constraintsLabel);
constraintsLabel.gridy++;
}
// case 1
JTextField montantField = new JTextField();
panel.add(montantField, constraintsField);
constraintsField.gridy++;
// case 2
JTextField tauxField = new JTextField();
panel.add(tauxField, constraintsField);
constraintsField.gridy++;
// case 3
JTextField nbreAnneeField = new JTextField();
panel.add(nbreAnneeField, constraintsField);
constraintsField.gridy++;
// case résultat
JLabel resultatLabel = new JLabel("");
panel.add(resultatLabel, constraintsField);
constraintsField.gridy++;
DocumentListener documentListener = new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
update(montantField,tauxField,nbreAnneeField,resultatLabel);
}
@Override
public void insertUpdate(DocumentEvent e) {
update(montantField,tauxField,nbreAnneeField,resultatLabel);
}
@Override
public void changedUpdate(DocumentEvent e) {
update(montantField,tauxField,nbreAnneeField,resultatLabel);
}
};
montantField.getDocument().addDocumentListener(documentListener);
tauxField.getDocument().addDocumentListener(documentListener);
nbreAnneeField.addActionListener(e->update(montantField,tauxField,nbreAnneeField,resultatLabel));
resultatLabel.setText("Saisissez le montant...");
frame.add(panel);
frame.pack();
frame.setSize(380,frame.getHeight());
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private static void update(JTextField montantField, JTextField tauxField,
JTextField nbreAnneeField, JLabel resultatLabel) {
if ( isEmpty(montantField) ) {
resultatLabel.setText("Saisissez le montant...");
}
else if ( isKo(montantField) ) {
resultatLabel.setText("Le montant doit être un nombre...");
}
else if ( isEmpty(tauxField) ) {
resultatLabel.setText("Saisissez le taux...");
}
else if ( isKo(tauxField) ) {
resultatLabel.setText("Le taux être un nombre...");
}
else if ( isEmpty(nbreAnneeField) ) {
resultatLabel.setText("Saisissez le nombre d'années...");
}
else if ( isKo(nbreAnneeField) ) {
resultatLabel.setText("Le nombre d'années doit être un nombre...");
}
else {
NumberFormat currency = NumberFormat.getCurrencyInstance();
double montant = getValue(montantField);
double rate;
double taux = getValue(tauxField);
double nbreAnnee = getValue(nbreAnneeField);
final int paymentsPerYear = 12;
double effectiveAnnualRate;
double payment;
rate = taux/100.00;
double ans = paymentsPerYear * nbreAnnee;
effectiveAnnualRate = rate /paymentsPerYear;
payment = montant * (effectiveAnnualRate / (1 - Math.pow(1 + effectiveAnnualRate,-ans)));
resultatLabel.setText(String.format("%f0.0"+currency.format(payment)));
}
}
private static double getValue(JTextField field) {
try{
Number number = NumberFormat.getNumberInstance().parse(field.getText());
return number.doubleValue();
}
catch(ParseException e) {
return 0;
}
}
static final String DECIMAL_PATTERN = "\\d+("+DecimalFormatSymbols.getInstance().getDecimalSeparator()+"\\d*)?";
private static boolean isKo(JTextField field) {
return !field.getText().matches(DECIMAL_PATTERN);
}
private static boolean isEmpty(JTextField field) {
return field.getText().trim().isEmpty();
}
} |
Partager