Code:
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
public class Fenster implements ActionListener {
private JFrame frame;
private JMenuBar menubar;
private JMenu jm_datei;
private JMenuItem datei_laden;
private JMenuItem beenden;
private JMenu jm_eingabe;
private JMenuItem eingabe_endbetrag;
private JPanel panel;
private JPanel links;
private JPanel jp_information;
private JLabel [] jl_information;
private JPanel rechts;
private JPanel jp_grundwerte;
private JLabel [] jl_grundwerte;
private JPanel jp_jahreszinssatz;
private JLabel [] jl_jahreszinssatz;
private JPanel jp_jahreszinssatz_alt;
private JLabel [] jl_jahreszinssatz_alt;
private JPanel jp_bereinigt;
private JRadioButton jrb_bereinigt;
private JLabel [] jl_bereinigt;
private JRadioButton jrb_unbereinigt;
private ButtonGroup bg_bereinigt;
private boolean formen_ergebnisse_erstellt=false;
private JTable table;
private String dateiname="";
private int rand=10;
private int FENSTERBREITE=1024;
private int FENSTERHOEHE=768;
Aufrechner aufrechner;
public Fenster() {
frame=new JFrame("Aufrechner",null);
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
menubar=new JMenuBar();
jm_datei=new JMenu("Datei");
datei_laden= new JMenuItem("Datei laden");
datei_laden.addActionListener(this);
JSeparator sep= new JSeparator();
beenden=new JMenuItem("Beenden");
beenden.addActionListener(this);
jm_datei.add(datei_laden);
jm_datei.add(sep);
jm_datei.add(beenden);
jm_eingabe=new JMenu("Eingabe");
eingabe_endbetrag=new JMenuItem("Endbetrag eingeben");
eingabe_endbetrag.setEnabled(false);
eingabe_endbetrag.addActionListener(this);
jm_eingabe.add(eingabe_endbetrag);
menubar.add(jm_datei);
menubar.add(jm_eingabe);
panel=new JPanel(null);
panel.setBounds(0, 0, FENSTERBREITE, FENSTERHOEHE);
links=new JPanel(null);
links.setBounds(10, 10, FENSTERBREITE/2-10+100, FENSTERHOEHE-40);
links.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Datenbereich: Noch keine Daten vorhanden"));
jp_information=new JPanel(null);
jp_information.setBounds(290, 30, 300, 150);
jp_information.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Daten müssen wie folgt vorliegen:"));
jl_information=new JLabel[8];
jl_information[0]=new JLabel("Spalte 1: Datum monatsweise");
jl_information[0].setBounds(rand, 15, 350, 25);
jl_information[1]=new JLabel("Spalte 2: Einzahlung");
jl_information[1].setBounds(rand, 30, 350, 25);
jl_information[2]=new JLabel("Spalte 3: Auszahlung");
jl_information[2].setBounds(rand, 45, 350, 25);
jl_information[3]=new JLabel("Beispiel:");
jl_information[3].setBounds(rand, 65, 350, 25);
jl_information[4]=new JLabel("01.01.10 300,75 0,00");
jl_information[4].setBounds(rand, 80, 350, 25);
jl_information[5]=new JLabel("01.02.10 753,25 150,00");
jl_information[5].setBounds(rand, 95, 350, 25);
jl_information[6]=new JLabel("Monate fortlaufend ohne Unterbrechung.");
jl_information[6].setBounds(rand, 110, 350, 25);
for(int i=0;i<7;i++) jp_information.add(jl_information[i]);
links.add(jp_information);
rechts=new JPanel(null);
rechts.setBounds(FENSTERBREITE/2+20+100, 10, FENSTERBREITE/2-10+200, FENSTERHOEHE-40);
rechts.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Noch keine Daten für Berechnung des effektiven Jahreszins vorhanden"));
panel.add(links);
panel.add(rechts);
frame.setJMenuBar(menubar);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private void erstelle_Bereinigtauswahl() {
this.jp_bereinigt= new JPanel(null);
this.jp_bereinigt.setBounds(290, 200, 300, 200);
this.jp_bereinigt.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Auswahl Bereinigt/Unbereinigt"));
this.jrb_bereinigt=new JRadioButton("Bereinigte Tabellendaten");
this.jrb_bereinigt.setBounds(5, 20, 250, 15);
this.jrb_bereinigt.addActionListener(this);
this.jrb_unbereinigt=new JRadioButton("Unbereinigte Tabellendaten");
this.jrb_unbereinigt.setBounds(5, 40, 250, 15);
this.jrb_unbereinigt.setSelected(true);
this.jrb_unbereinigt.addActionListener(this);
this.jl_bereinigt=new JLabel[8];
this.jl_bereinigt[0]=new JLabel("unbereinigt:");
this.jl_bereinigt[0].setBounds(rand, 60, 300, 25);
this.jl_bereinigt[1]=new JLabel("01.01.10 300,75 0,00");
this.jl_bereinigt[1].setBounds(rand, 75, 300, 25);
this.jl_bereinigt[2]=new JLabel("01.02.10 753,25 150,00");
this.jl_bereinigt[2].setBounds(rand, 90, 300, 25);
this.jl_bereinigt[3]=new JLabel("01.03.10 200,00 500,00");
this.jl_bereinigt[3].setBounds(rand, 105, 300, 25);
this.jl_bereinigt[4]=new JLabel("bereinigt:");
this.jl_bereinigt[4].setBounds(rand, 125, 300, 25);
this.jl_bereinigt[5]=new JLabel("01.01.10 300,75 0,00");
this.jl_bereinigt[5].setBounds(rand, 140, 300, 25);
this.jl_bereinigt[6]=new JLabel("01.02.10 603,25 0,00");
this.jl_bereinigt[6].setBounds(rand, 155, 300, 25);
this.jl_bereinigt[7]=new JLabel("01.03.10 0,00 300,00");
this.jl_bereinigt[7].setBounds(rand, 170, 300, 25);
this.bg_bereinigt =new ButtonGroup();
this.bg_bereinigt.add(jrb_bereinigt);
this.bg_bereinigt.add(jrb_unbereinigt);
this.jp_bereinigt.add(jrb_bereinigt);
this.jp_bereinigt.add(jrb_unbereinigt);
this.jp_bereinigt.add(jl_bereinigt[0]);
this.jp_bereinigt.add(jl_bereinigt[1]);
this.jp_bereinigt.add(jl_bereinigt[2]);
this.jp_bereinigt.add(jl_bereinigt[3]);
this.jp_bereinigt.add(jl_bereinigt[4]);
this.jp_bereinigt.add(jl_bereinigt[5]);
this.jp_bereinigt.add(jl_bereinigt[6]);
this.jp_bereinigt.add(jl_bereinigt[7]);
this.links.add(jp_bereinigt);
this.links.repaint();
}
private void aktualisiereTabelle() {
for(int i=0;i<aufrechner.getMonate();i++) {
this.table.setValueAt(aufrechner.getDatum(i), i, 0);
this.table.setValueAt(runden(aufrechner.getPlus(i),2), i, 1);
this.table.setValueAt(runden(aufrechner.getMinus(i),2), i, 2);
}
this.links.repaint();
}
public static double runden(double wert, int stellen) {
long hilfswert = 0;
int teiler=1;
for(int i=1;i<stellen+1;i++) {
teiler=teiler*10;
}
wert=wert*teiler+0.5;
hilfswert=(long)wert;
wert=(double)hilfswert;
wert=wert/teiler;
return wert;
}
private String formatiereDouble(double zahl) {
long hilfswert=(long)zahl;
int komma=(int)((zahl-(double)(hilfswert))*100);
String vorne=String.valueOf(hilfswert);
String hinten=String.valueOf(komma);
if(hinten.isEmpty())hinten=hinten.concat("00");
if(hinten.length()==1)hinten=hinten.concat("0");
ArrayList<Character>liste=new ArrayList<>();
ArrayList<Character>hilfsliste=new ArrayList<>();
char[] chararray=vorne.toCharArray();
int j=0;
liste.add(',');
for(int i=chararray.length-1;i>-1;i--) {
liste.add(Character.valueOf(chararray[i]));
j++;
if(j%3==0 &&i>0)liste.add('.');
}
StringBuilder formatierteZahl=new StringBuilder(hilfsliste.size());
for(int i=liste.size()-1;i>-1;i--) {
hilfsliste.add(liste.get(i));
}
for(Character c: hilfsliste) {
formatierteZahl.append(c);
}
return formatierteZahl.toString().concat(hinten);
}
private void aktualisiereBerechnungen() {
String hilfstring="Eingezahlt wurden "+this.formatiereDouble(runden(aufrechner.getEingezahlt(),2))+" € in "+aufrechner.getMonate()+" Monaten";
this.jl_grundwerte[0].setText(hilfstring);
hilfstring="Ausgezahlt wurden "+this.formatiereDouble(runden(aufrechner.getAusgezahlt(),2))+" €.";
this.jl_grundwerte[1].setText(hilfstring);
hilfstring="Eingezahlt mit Berücksichtung der Abhebungen wurden "+this.formatiereDouble(runden(aufrechner.getEingezahlt()-aufrechner.getAusgezahlt(),2))+" €.";
this.jl_grundwerte[2].setText(hilfstring);
double jahreszinssatz=runden(aufrechner.rechne_Jahreszins(),2);
hilfstring="Tatsächlicher Endbetrag: "+this.formatiereDouble(runden(aufrechner.getEndbetrag(),2))+" € Annährerung: "+this.formatiereDouble(runden(aufrechner.getCaEndbetrag(),2))+" €" +
" Abweichung: "+(runden(aufrechner.getEndbetrag()-aufrechner.getCaEndbetrag(),2)+" €");
this.jl_jahreszinssatz[0].setText(hilfstring);
hilfstring="Ermittelter effektiver Jahreszins: "+jahreszinssatz+" Prozent.";
this.jl_jahreszinssatz[1].setText(hilfstring);
hilfstring="Annäherung ereicht in "+aufrechner.getDurchlaeufe()+" Durchgängen.";
this.jl_jahreszinssatz[2].setText(hilfstring);
jahreszinssatz=runden(aufrechner.rechne_Jahreszins_gleichmaessige_Einzahlung(),2);
hilfstring="Sparbetrag pro Monat: "+this.formatiereDouble(runden(aufrechner.getEingezahlt()-aufrechner.getAusgezahlt(),2))+"€ / "+aufrechner.getMonate()+" Monate = "
+this.formatiereDouble(runden(aufrechner.getMonatsrate(),2))+" €/Monat.";
this.jl_jahreszinssatz_alt[0].setText(hilfstring);
hilfstring="Tatsächlicher Endbetrag: "+this.formatiereDouble(runden(aufrechner.getEndbetrag(),2))+" € Annährerung: "+this.formatiereDouble(runden(aufrechner.getCaEndbetrag(),2))+" €" +
" Abweichung: "+runden(aufrechner.getEndbetrag()-aufrechner.getCaEndbetrag(),2)+" €";
this.jl_jahreszinssatz_alt[1].setText(hilfstring);
hilfstring="Ermittelter effektiver Jahreszins: "+jahreszinssatz+" Prozent.";
this.jl_jahreszinssatz_alt[2].setText(hilfstring);
hilfstring="Annäherung ereicht in "+aufrechner.getDurchlaeufe()+" Durchgängen.";
this.jl_jahreszinssatz_alt[3].setText(hilfstring);
this.rechts.repaint();
}
private String[] ladeDatei(String datName) {
File file = new File(datName);
ArrayList<String> zeilen = new ArrayList<String>();
if (!file.canRead() || !file.isFile())
System.exit(0);
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader(datName));
String zeile = null;
while ((zeile = in.readLine()) != null) {
zeilen.add(zeile);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null)
try {
in.close();
} catch (IOException e) {
}
}
String rueckgabe[]=new String [zeilen.size()];
for(int i=0;i<zeilen.size();i++)
{
rueckgabe[i]=zeilen.get(i);
}
return rueckgabe;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
String [] textdatei=null;
if (e.getSource()==this.datei_laden){
JFileChooser chooser=new JFileChooser("D:/Daten/eclipse_workspace/Aufrechner");
int auswahl=chooser.showOpenDialog(null);
if(auswahl==JFileChooser.APPROVE_OPTION) {
dateiname=chooser.getSelectedFile().getName();
textdatei=ladeDatei(dateiname);
aufrechner=new Aufrechner(textdatei);
if(!aufrechner.getFehler_Daten()) {
Object [][] komplett= new Object [aufrechner.getMonate()][3];
for(int i=0;i<aufrechner.getMonate();i++) {
komplett[i][0]=aufrechner.getDatum(i);
komplett[i][1]=aufrechner.getPlus(i);
komplett[i][2]=aufrechner.getMinus(i);
}
String[] titel={"Datum ","Eingezahlt ","Ausgezahlt "};
this.table=new JTable(komplett,titel);
JScrollPane scrollbar=new JScrollPane(table,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollbar.setBounds(30, 30, 250, 600);
links.add(scrollbar);
links.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Gelesene Daten aus Datei: ->"+dateiname + " -> Daten unbereinigt"));
rechts.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Unter Eingabe Menüpunkt <Endbetrag eingeben> auswählen"));
eingabe_endbetrag.setEnabled(true);
}
else
JOptionPane.showMessageDialog(null, "Fehler beim Laden der Datei","Error",
JOptionPane.ERROR_MESSAGE);
}//ende von if(auswahl==JFileChooser.APPROVE_OPTION
}//ende von datei laden
if (e.getSource()==this.eingabe_endbetrag) {
boolean korrekt=false;
String hilfstring="";
while(!korrekt) {
korrekt=true;
hilfstring= JOptionPane.showInputDialog(null, "Bitte Endbetrag eingeben:");
try {
aufrechner.setEndbetrag(Double.valueOf(hilfstring));
} catch (NumberFormatException e2) {
// TODO: handle exception
korrekt=false;
JOptionPane.showMessageDialog(null, "Es wurde keine Zahl eingegeben");
}
}
this.rechts.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Berechungen aus den vorhandenen Daten:"));
if(!this.formen_ergebnisse_erstellt) {
this.jl_grundwerte=new JLabel[3];
this.jp_grundwerte=new JPanel(null);
this.jp_grundwerte.setBounds(20, 30, 550, 150);
this.jp_grundwerte.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Grundergebnisse:"));
this.jl_grundwerte[0]=new JLabel();
this.jl_grundwerte[0].setBounds(10, 25, 540, 30);
this.jl_grundwerte[1]=new JLabel();
this.jl_grundwerte[1].setBounds(10, 65, 540, 30);
this.jl_grundwerte[2]=new JLabel();
this.jl_grundwerte[2].setBounds(10, 105, 540, 30);
this.jp_grundwerte.add(jl_grundwerte[0]);
this.jp_grundwerte.add(jl_grundwerte[1]);
this.jp_grundwerte.add(jl_grundwerte[2]);
this.jl_jahreszinssatz=new JLabel[3];
this.jp_jahreszinssatz=new JPanel(null);
this.jp_jahreszinssatz.setBounds(20, 200, 550, 150);
this.jp_jahreszinssatz.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "effektiver Jahreszins:"));
this.jl_jahreszinssatz[0]=new JLabel(hilfstring);
this.jl_jahreszinssatz[0].setBounds(10, 25, 540, 30);
this.jl_jahreszinssatz[1]=new JLabel(hilfstring);
this.jl_jahreszinssatz[1].setBounds(10, 65, 540, 30);
this.jl_jahreszinssatz[2]=new JLabel(hilfstring);
this.jl_jahreszinssatz[2].setBounds(10, 105, 540, 30);
this.jp_jahreszinssatz.add(jl_jahreszinssatz[0]);
this.jp_jahreszinssatz.add(jl_jahreszinssatz[1]);
this.jp_jahreszinssatz.add(jl_jahreszinssatz[2]);
this.jl_jahreszinssatz_alt=new JLabel[4];
this.jp_jahreszinssatz_alt=new JPanel(null);
this.jp_jahreszinssatz_alt.setBounds(20, 370, 550, 200);
this.jp_jahreszinssatz_alt.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Alternativer effektiver Jahreszins berechnet mit gleichmässiger Einzahlung:"));
this.jl_jahreszinssatz_alt[0]=new JLabel(hilfstring);
this.jl_jahreszinssatz_alt[0].setBounds(10, 25, 540, 30);
this.jl_jahreszinssatz_alt[1]=new JLabel(hilfstring);
this.jl_jahreszinssatz_alt[1].setBounds(10, 65, 540, 30);
this.jl_jahreszinssatz_alt[2]=new JLabel(hilfstring);
this.jl_jahreszinssatz_alt[2].setBounds(10, 105, 540, 30);
this.jl_jahreszinssatz_alt[3]=new JLabel(hilfstring);
this.jl_jahreszinssatz_alt[3].setBounds(10, 145, 540, 30);
this.jp_jahreszinssatz_alt.add(jl_jahreszinssatz_alt[0]);
this.jp_jahreszinssatz_alt.add(jl_jahreszinssatz_alt[1]);
this.jp_jahreszinssatz_alt.add(jl_jahreszinssatz_alt[2]);
this.jp_jahreszinssatz_alt.add(jl_jahreszinssatz_alt[3]);
this.rechts.add(this.jp_grundwerte);
this.rechts.add(this.jp_jahreszinssatz);
this.rechts.add(this.jp_jahreszinssatz_alt);
}
this.aktualisiereBerechnungen();
if(!this.formen_ergebnisse_erstellt)this.formen_ergebnisse_erstellt=true;
this.erstelle_Bereinigtauswahl();
}
if (e.getSource()==this.jrb_bereinigt) {
this.aufrechner.tauschen();
this.aktualisiereTabelle();
this.aktualisiereBerechnungen();
links.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Gelesene Daten aus Datei: ->"+dateiname + " -> Daten bereinigt"));
}
if (e.getSource()==this.jrb_unbereinigt) {
this.aufrechner.tauschen();
this.aktualisiereTabelle();
this.aktualisiereBerechnungen();
links.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createEtchedBorder(), "Gelesene Daten aus Datei: ->"+dateiname + " -> Daten unbereinigt"));
}
if (e.getSource()==this.beenden) {
frame.setVisible(false);
frame.dispose();
System.exit(0);
}
}
}