Code:
import net.rim.device.api.ui.Field;
import net.rim.device.api.ui.FieldChangeListener;
import net.rim.device.api.ui.FocusChangeListener;
import net.rim.device.api.ui.component.EditField;
import net.rim.device.api.ui.component.LabelField;
import net.rim.device.api.ui.text.TextFilter;
import net.rim.device.api.ui.text.NumericTextFilter;
import net.rim.device.api.ui.container.MainScreen;
public class TableScreen extends MainScreen implements FocusChangeListener {
/// USER INPUT ///
EditField custnbrField; /// 1234567890
EditField principalField; /// $10,000.00
EditField annintrateField; //// 10.00%
EditField amortprdField; /// 3
float aa=0,bb=0,cc=0,dd=0,ee=0,ff=0;
/// CALCULATIONS ///
EditField effannintrateField; // ROUND((1+mthlyintfactor)^12-1,4)....Result = 10.25%
EditField mthlyintfactorField; // ((1+(annintrate/2))^2)^(1/12)-1).....Result = 0.008164846%
EditField mthsamortField; // amortprd*12......Result = 36 mths
EditField mthlypaymentField; // (principal * mthlyintfactor)/(1-(1+mthlyintfactor)^(-mthsamort)).....Result = $321.7234593
EditField rndnearestcentField; // ROUND(mthlypayment,2).....Result = $321.72
EditField rndnearestdollarField; // ROUND(rndnearestcent,0)..... Result = $322.00
public TableScreen() {
TextFilter numeric = new NumericTextFilter(NumericTextFilter.ALLOW_DECIMAL);
custnbrField = new EditField("Customer Number: " , "");
custnbrField.setFilter(TextFilter.get(TextFilter.NUMERIC)); // no decimal
add(custnbrField);
principalField = new EditField("Initial Principal: $ " , "");
add(principalField);
annintrateField = new EditField("Annual Interest Rate: % " , "");
annintrateField.setFilter(numeric);
add(annintrateField);
amortprdField = new EditField("Amortization Period: (yrs) " , "");
amortprdField.setFilter(TextFilter.get(TextFilter.NUMERIC)); // no decimal
add(amortprdField);
effannintrateField = new EditField("Effective Annual Interest Rate: %" + aa,"" );
effannintrateField.setFilter(numeric);
add(effannintrateField);
mthlyintfactorField = new EditField("Monthly Interest Factor: " + bb,"" );
add(mthlyintfactorField);
mthsamortField = new EditField("Months to Amortization: "+ cc,"" );
add(mthsamortField);
//// Monthly Payment to be displayed automatically after Monthly Interest Factor has been calculated
mthlypaymentField = new EditField("Periodic Monthly Payment: $"+ dd,"" );
add(mthlypaymentField);
rndnearestcentField = new EditField("Rounded to nearest cent: $" + ee ,"");
add(rndnearestcentField);
rndnearestdollarField = new EditField("Rounded to nearest dollar:$" + ff ,"");
add(rndnearestdollarField);
}
EditField has two arguments. See the definition: EditField(String label, String initialValue)
I didn't understand the calculation below but you should use getText() method of EditField to get the value and use Float.parseFloat() to change into float value.
Also you can use Math.round(), Math.ceil(), Math.floor(), Math.pow() method of Java for calculation. I didn't try these.
Code:
public void focusChanged(Field field, int eventType){
if (eventType == FOCUS_LOST) {
if (field == mthlypaymentField) {
aa = ROUND((1 + Float.parseFloat(mthlyintfactorField.getText()))^12-1,4);
bb = ((1+(Float.parseFloat(annintrateField.getText())/2))^2)^(1/12)-1);
cc = Float.parseFloat(annintrateField.getText())*12;
dd = (Float.parseFloat(principalField.getText()) * bb)/(1-(1+ bb)^(- cc));
ee = ROUND(dd,2);
ff = ROUND(dd,Float.parseFloat(rndnearestcentField.getText()),0);
}
}
}
}