package fi.dy.esav.JavaApplet;
import java.awt.*;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;
import java.lang.Math;
public class JavaApplet extends JApplet implements DocumentListener{
JPanel inputpanel;
FormLayout inputpanelLayout;
JTextField tf_paaoma, tf_merkitsemispalkkioPros, tf_inflaatio, tf_sijoitusaika, tf_hoitomaksu, tf_oletettutuotto, tf_tuottoprosentti, tf_lahdevero;
JLabel lbl_muuttujat, lbl_empty, lbl_empty2, lbl_paaoma, lbl_merkitsemispalkkioPros, lbl_inflaatio, lbl_sijoitusaika, lbl_hoitomaksu, lbl_oletettutuotto, lbl_tuottoprosentti, lbl_lahdevero;
public void initInput() {
initInputPanel();
createInputComponents();
setInputLabels();
addInputComponents();
createInputListeners();
}
public void initInputPanel() {
inputpanel = new JPanel();
inputpanelLayout = new FormLayout(
new ColumnSpec[] {
FormFactory.RELATED_GAP_COLSPEC,
ColumnSpec.decode("max(175dlu;default)"),
FormFactory.RELATED_GAP_COLSPEC,
ColumnSpec.decode("default:grow"),
FormFactory.RELATED_GAP_COLSPEC
},
new RowSpec[] {
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
});
inputpanel.setLayout(inputpanelLayout);
}
public void createInputComponents() {
lbl_empty = new JLabel();
lbl_empty2 = new JLabel();
lbl_muuttujat = new JLabel();
tf_paaoma = new JTextField();
tf_merkitsemispalkkioPros = new JTextField();
tf_inflaatio = new JTextField();
tf_sijoitusaika = new JTextField();
tf_hoitomaksu = new JTextField();
tf_oletettutuotto = new JTextField();
tf_tuottoprosentti = new JTextField();
tf_lahdevero = new JTextField();
lbl_paaoma = new JLabel();
lbl_merkitsemispalkkioPros = new JLabel();
lbl_inflaatio = new JLabel();
lbl_sijoitusaika = new JLabel();
lbl_hoitomaksu = new JLabel();
lbl_oletettutuotto = new JLabel();
lbl_tuottoprosentti = new JLabel();
lbl_lahdevero = new JLabel();
}
public void createInputListeners() {
tf_paaoma.getDocument().addDocumentListener(this);
tf_merkitsemispalkkioPros.getDocument().addDocumentListener(this);
tf_inflaatio.getDocument().addDocumentListener(this);
tf_sijoitusaika.getDocument().addDocumentListener(this);
tf_hoitomaksu.getDocument().addDocumentListener(this);
tf_oletettutuotto.getDocument().addDocumentListener(this);
tf_tuottoprosentti.getDocument().addDocumentListener(this);
tf_lahdevero.getDocument().addDocumentListener(this);
}
public void setInputLabels() {
lbl_empty.setText(" ");
lbl_empty2.setText(" ");
lbl_muuttujat.setText("Muuttujat:");
lbl_paaoma.setText("sijoitettu pääoma");
lbl_merkitsemispalkkioPros.setText("merkitsemispalkkio");
lbl_inflaatio.setText("vuotuinen inflaatio");
lbl_sijoitusaika.setText("sijoitusaika vuosina");
lbl_hoitomaksu.setText("vuotuinen hoitomaksu sijoitetusta pääomasta
(ei käytetä laskentaan)");
lbl_tuottoprosentti.setText("oletettu vuosittainen tuotto-%
(hoitomaksut tästä jo vähennetty)");
lbl_lahdevero.setText("lähdevero korkotuotosta");
}
public void addInputComponents() {
inputpanel.add(lbl_muuttujat, "2, 2");
inputpanel.add(lbl_paaoma, "2, 4");
inputpanel.add(tf_paaoma, "4, 4");
inputpanel.add(lbl_merkitsemispalkkioPros, "2, 6");
inputpanel.add(tf_merkitsemispalkkioPros, "4, 6");
inputpanel.add(lbl_inflaatio, "2, 8");
inputpanel.add(tf_inflaatio, "4, 8");
inputpanel.add(lbl_sijoitusaika, "2, 10");
inputpanel.add(tf_sijoitusaika, "4, 10");
inputpanel.add(lbl_hoitomaksu, "2, 12");
inputpanel.add(tf_hoitomaksu, "4, 12");
inputpanel.add(lbl_tuottoprosentti, "2, 14");
inputpanel.add(tf_tuottoprosentti, "4, 14");
inputpanel.add(lbl_lahdevero, "2, 16");
inputpanel.add(tf_lahdevero, "4, 16");
}
JPanel outputpanel;
FormLayout outputpanellayout;
JLabel lbl_tulokset;
//
JLabel lbl_outalkupaaoma, lbl_outmerkitsemispalkkio, lbl_outhoitomaksut, lbl_outkorkotuotto, lbl_outverot;
JLabel lbl_outalkupaaoma_num, lbl_outmerkitsemispalkkio_num, lbl_outhoitomaksut_num, lbl_outkorkotuotto_num, lbl_outverot_num;
JLabel lbl_sijoituksenarvo, lbl_arvovaatimus, lbl_tuottoe, lbl_tuottop;
JLabel lbl_sijoituksenarvo_num, lbl_arvovaatimus_num, lbl_tuottoe_num, lbl_tuottop_num;
public void initOutput() {
initOutputPanel();
createOutputCommponents();
setOutputLabels();
addOutputComponents();
}
public void initOutputPanel() {
outputpanel = new JPanel();
outputpanellayout = new FormLayout(
new ColumnSpec[] {
FormFactory.RELATED_GAP_COLSPEC,
ColumnSpec.decode("max(175dlu;default)"),
FormFactory.RELATED_GAP_COLSPEC,
ColumnSpec.decode("default:grow"),
FormFactory.RELATED_GAP_COLSPEC
},
new RowSpec[] {
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
});
outputpanel.setLayout(outputpanellayout);
outputpanel.setBackground(Color.GRAY);
}
public void createOutputCommponents() {
lbl_tulokset = new JLabel();
lbl_outalkupaaoma = new JLabel();
lbl_outmerkitsemispalkkio = new JLabel();
lbl_outhoitomaksut = new JLabel();
lbl_outkorkotuotto = new JLabel();
lbl_outverot = new JLabel();
lbl_outalkupaaoma_num = new JLabel();
lbl_outmerkitsemispalkkio_num = new JLabel();
lbl_outhoitomaksut_num = new JLabel();
lbl_outkorkotuotto_num = new JLabel();
lbl_outverot_num = new JLabel();
lbl_sijoituksenarvo = new JLabel();
lbl_arvovaatimus = new JLabel();
lbl_tuottoe = new JLabel();
lbl_tuottop = new JLabel();
lbl_sijoituksenarvo_num = new JLabel();
lbl_arvovaatimus_num = new JLabel();
lbl_tuottoe_num = new JLabel();
lbl_tuottop_num = new JLabel();
}
public void setOutputLabels() {
lbl_tulokset.setText("Tulokset:");
lbl_outalkupaaoma.setText("Alkupääoma");
lbl_outalkupaaoma.setForeground(Color.GREEN);
lbl_outalkupaaoma_num.setForeground(Color.GREEN);
lbl_outmerkitsemispalkkio.setText(" - merkitsemispalkkio");
lbl_outmerkitsemispalkkio.setForeground(Color.RED);
lbl_outmerkitsemispalkkio_num.setForeground(Color.RED);
lbl_outhoitomaksut.setText("(-hoitomaksut)");
lbl_outhoitomaksut.setForeground(Color.RED);
lbl_outhoitomaksut_num.setForeground(Color.RED);
lbl_outkorkotuotto.setText("korkotuotto");
lbl_outkorkotuotto.setForeground(Color.GREEN);
lbl_outkorkotuotto_num.setForeground(Color.GREEN);
lbl_outverot.setText(" - verot");
lbl_outverot.setForeground(Color.RED);
lbl_outverot_num.setForeground(Color.RED);
lbl_sijoituksenarvo.setText("Sijoituksen arvo kauden lopussa");
lbl_arvovaatimus.setText("Inflaatiokorjattu sijoituksen
arvovaatimus kauden lopussa:");
lbl_tuottoe.setText("Inflaation ylittävä tuotto
kun kaikki kulut vähennetty");
lbl_tuottop.setText("Inflaation ylittävä kokonaistuotto");
}
public void addOutputComponents() {
outputpanel.add(lbl_tulokset, "2, 2");
outputpanel.add(lbl_outalkupaaoma, "2, 4");
outputpanel.add(lbl_outalkupaaoma_num, "4, 4");
outputpanel.add(lbl_outmerkitsemispalkkio, "2, 6");
outputpanel.add(lbl_outmerkitsemispalkkio_num, "4, 6");
outputpanel.add(lbl_outhoitomaksut, "2, 8");
outputpanel.add(lbl_outhoitomaksut_num, "4, 8");
outputpanel.add(lbl_outkorkotuotto, "2, 12");
outputpanel.add(lbl_outkorkotuotto_num, "4, 12");
outputpanel.add(lbl_outverot, "2, 14");
outputpanel.add(lbl_outverot_num, "4, 14");
outputpanel.add(lbl_sijoituksenarvo, "2, 18");
outputpanel.add(lbl_sijoituksenarvo_num, "4, 18");
outputpanel.add(lbl_arvovaatimus, "2, 20");
outputpanel.add(lbl_arvovaatimus_num, "4, 20");
outputpanel.add(lbl_tuottoe, "2, 24");
outputpanel.add(lbl_tuottoe_num, "4, 24");
outputpanel.add(lbl_tuottop, "2, 26");
outputpanel.add(lbl_tuottop_num, "4, 26");
}
public void init() {
setSize(500,600);
setBackground(Color.WHITE);
// setLayout(new GridLayout(1,1));
setLayout(new FormLayout(
new ColumnSpec[] {
ColumnSpec.decode("max(500px;default)")
},
new RowSpec[] {
FormFactory.DEFAULT_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.RELATED_GAP_ROWSPEC,
FormFactory.DEFAULT_ROWSPEC
}));
initInput();
initOutput();
add(inputpanel, "1, 1");
add(outputpanel, "1, 4");
}
@Override
public void insertUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
calculate();
}
@Override
public void removeUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
calculate(); }
@Override
public void changedUpdate(DocumentEvent e) {
// TODO Auto-generated method stub
calculate(); }
public void calculate() {
boolean virhe = false;
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double alkupaaoma = 0;
if (isValid(tf_paaoma.getText())) {
alkupaaoma = parse( tf_paaoma.getText() );
} else {
virhe = true;
}
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double merkitsemispalkkio_kerr = 0;
double merkitsemispalkkio = 0;
if (isValid(tf_merkitsemispalkkioPros.getText())) {
merkitsemispalkkio_kerr = parse( tf_merkitsemispalkkioPros.getText() )/100;
merkitsemispalkkio = merkitsemispalkkio_kerr * alkupaaoma;
} else {
virhe = true;
}
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double sijoitusaika = 0;
if(isValid(tf_sijoitusaika.getText())) {
sijoitusaika = parse(tf_sijoitusaika.getText());
} else {
virhe = true;
}
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double hoitomaksu_kerr = 0;
double hoitomaksut_yht = 0;
if(isValid(tf_hoitomaksu.getText())) {
hoitomaksu_kerr = parse (tf_hoitomaksu.getText())/100;
hoitomaksut_yht = (alkupaaoma-merkitsemispalkkio)*sijoitusaika*hoitomaksu_kerr;
} else {
virhe = true;
}
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\=(paaoma-merkitsemispalkkio)*((1+tuottoprosentti)^sijoitusaika)-paaoma
double tuottoprosentti = 0;
if(isValid(tf_tuottoprosentti.getText())) {
tuottoprosentti = parse(tf_tuottoprosentti.getText())/100;
} else {
virhe = true;
}
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double inflaatio = 0;
if(isValid(tf_inflaatio.getText())) {
inflaatio = parse(tf_inflaatio.getText())/100;
} else {
virhe = true;
}
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double korkotuotto = (alkupaaoma-merkitsemispalkkio)*Math.pow(1+tuottoprosentti,sijoitusaika)-alkupaaoma;
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double vero = 0;
double verot_yht = 0;
if(isValid(tf_lahdevero.getText())) {
vero = parse(tf_lahdevero.getText());
verot_yht = vero * korkotuotto;
} else {
virhe = true;
}
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double arvo = 0;
arvo = alkupaaoma - merkitsemispalkkio + korkotuotto -verot_yht;
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double arvovaatimus = 0;
arvovaatimus = alkupaaoma * Math.pow(1+inflaatio, sijoitusaika);
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double tuottoe = 0;
tuottoe = arvo - arvovaatimus;
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
double tuottop = 0;
tuottop = tuottoe/alkupaaoma*100;
////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
if(!virhe) {
lbl_outalkupaaoma_num.setText(toStr(alkupaaoma));
lbl_outmerkitsemispalkkio_num.setText(toStr(merkitsemispalkkio));
lbl_outhoitomaksut_num.setText(toStr(hoitomaksut_yht));
lbl_outkorkotuotto_num.setText(toStr(korkotuotto));
lbl_outverot_num.setText(toStr(verot_yht));
lbl_sijoituksenarvo_num.setText(toStr(arvo));
lbl_arvovaatimus_num.setText(toStr(arvovaatimus));
lbl_tuottoe_num.setText(toStr(tuottoe));
lbl_tuottop_num.setText(toStr(tuottop));
} else {
lbl_outalkupaaoma_num.setText("");
lbl_outmerkitsemispalkkio_num.setText("Virhe");
lbl_outhoitomaksut_num.setText("syötteessä!");
lbl_outkorkotuotto_num.setText("");
lbl_outverot_num.setText("");
lbl_sijoituksenarvo_num.setText("");
lbl_arvovaatimus_num.setText("");
lbl_tuottoe_num.setText("");
lbl_tuottop_num.setText("");
}
}
public String toStr(double luku) {
return Double.toString(luku);
}
public double parse(String input) {
double output;
if (!isValid(input)) {
return 0;
}
return Double.parseDouble(input);
}
public boolean isValid(String input) {
boolean error = false;
try {
Double.parseDouble(input);
} catch (Exception e) {
error = true;
}
if (error) {
return false;
}
return true;
}
}