Hallo,
Ich arbeite an einem Verbrauchsrechner(Gas,Strom). Dort habe ich nun ein Menü eingebaut in dem ich die errechneten Werte in eine Textdatei schreiben will(muss dazusagen ich weiß nicht ob das Menü an dieser Stelle richtig ist oder ob ich es in eine extra Klasse legen muss. Aber dort wäre dann nur das Menü drin, und dafür eine extra Klasse??).
Wenn ich nun das MenuItem auswähle wird zwar in die Datei geschrieben doch nur 0 Werte und nicht die Eigentlichen.
Ich habe verschiedene Methoden versucht auf die Variablen zu zugreifen die in die Datei geschrieben werden sollen. Einmal einfach OBJEKT.VARIABLE und einmal mit Getter für die Variable.
[CODE lang="java" title="Ausschnitte"]public class GasPanel extends JPanel{
//Attribute
public double zustandszahl=0.94876, brennwert=11.296, standZaehler=2429, preisKwh=6.39, grundgebuher=123.76, vorJhBetrag=385.83;
public double doubEingabe, rechnungszeitraum, kwh, aktKosten, kostenOGrundg, diffVJoGrundg, diffVJaus;
//Einheiten
public String kwhEin = "kWh";
public char kubikEin = '\u00B3', euroEin = '\u20AC';
public double getAktKosten() {
return aktKosten;
}
public double getDiffVJaus() {
return diffVJaus;
}
//Verrechnung
public void verrechnen() {
//Umwandlung in kWh
rechnungszeitraum = doubEingabe - standZaehler;
kwh = Math.round(rechnungszeitraum * zustandszahl * brennwert);
//Aktuelle Gesamtkosten
kostenOGrundg = Math.round(kwh * preisKwh / 100);
aktKosten = Math.round(kostenOGrundg + grundgebuher);
diffVJaus = Math.round(aktKosten - vorJhBetrag);
diffVJoGrundg = Math.round(kostenOGrundg - vorJhBetrag);
}
//Button Aufruf verrechnen()
JButton btnOk = new JButton("OK");
gbc.anchor = GridBagConstraints.CENTER;
gbl(1, 9, 1, 1);
gbc.ipadx = 30;
gbc.ipady = 3;
btnOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
doubEingabe = Double.parseDouble(eingabeKubik.getText());
verrechnen();
// Es werden JLabels gesettet
betragOgrundG.setText(kostenOGrundg + "");
diffVorjahrOgrundg.setText(diffVJoGrundg + "");
anzKwh.setText(kwh + "");
anzRechnungszeitraum.setText(rechnungszeitraum + "");
aktRechnungsbetrag.setText(aktKosten + "");
diffVJ.setText(diffVJaus + "");
}
});
add(btnOk, gbc);[/CODE]
Ich arbeite an einem Verbrauchsrechner(Gas,Strom). Dort habe ich nun ein Menü eingebaut in dem ich die errechneten Werte in eine Textdatei schreiben will(muss dazusagen ich weiß nicht ob das Menü an dieser Stelle richtig ist oder ob ich es in eine extra Klasse legen muss. Aber dort wäre dann nur das Menü drin, und dafür eine extra Klasse??).
Java:
package Hauptprogramm;
import subclasses.Aufzeichnungen;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;
/**
* Verbrauchsrechner: Zur Ermittlung meines Strom und Gas Verbrauches
* @author MasterShredder
* @version 2.0
*/
public class Verbrauchsrechner {
public void run() {
JFrame frame = new JFrame();
GasPanel gp = new GasPanel();
StromPanel sp = new StromPanel();
Aufzeichnungen aufzeichnung = new Aufzeichnungen();
//Erstellung Menübar
JMenuBar bar = new JMenuBar();
JMenu werteMenu = new JMenu("Werte");
JMenu speichernMenu = new JMenu("Werte speichern");
//GasPanel speichern
JMenuItem speiGas = new JMenuItem("Gas Panel");
speiGas.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
aufzeichnung.gasSchreiben();
}
});
//StromPanel speichern
JMenuItem speiStrom = new JMenuItem("Strom Panel");
speiStrom.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
speichernMenu.add(speiGas);
speichernMenu.add(speiStrom);
werteMenu.add(speichernMenu);
bar.add(werteMenu);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.add(gp, BorderLayout.CENTER);
frame.add(sp, BorderLayout.EAST);
frame.add(bar, BorderLayout.NORTH);
frame.setSize(1000, 350);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new Verbrauchsrechner().run());
}
}
Wenn ich nun das MenuItem auswähle wird zwar in die Datei geschrieben doch nur 0 Werte und nicht die Eigentlichen.
Ich habe verschiedene Methoden versucht auf die Variablen zu zugreifen die in die Datei geschrieben werden sollen. Einmal einfach OBJEKT.VARIABLE und einmal mit Getter für die Variable.
[CODE lang="java" title="Ausschnitte"]public class GasPanel extends JPanel{
//Attribute
public double zustandszahl=0.94876, brennwert=11.296, standZaehler=2429, preisKwh=6.39, grundgebuher=123.76, vorJhBetrag=385.83;
public double doubEingabe, rechnungszeitraum, kwh, aktKosten, kostenOGrundg, diffVJoGrundg, diffVJaus;
//Einheiten
public String kwhEin = "kWh";
public char kubikEin = '\u00B3', euroEin = '\u20AC';
public double getAktKosten() {
return aktKosten;
}
public double getDiffVJaus() {
return diffVJaus;
}
//Verrechnung
public void verrechnen() {
//Umwandlung in kWh
rechnungszeitraum = doubEingabe - standZaehler;
kwh = Math.round(rechnungszeitraum * zustandszahl * brennwert);
//Aktuelle Gesamtkosten
kostenOGrundg = Math.round(kwh * preisKwh / 100);
aktKosten = Math.round(kostenOGrundg + grundgebuher);
diffVJaus = Math.round(aktKosten - vorJhBetrag);
diffVJoGrundg = Math.round(kostenOGrundg - vorJhBetrag);
}
//Button Aufruf verrechnen()
JButton btnOk = new JButton("OK");
gbc.anchor = GridBagConstraints.CENTER;
gbl(1, 9, 1, 1);
gbc.ipadx = 30;
gbc.ipady = 3;
btnOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
doubEingabe = Double.parseDouble(eingabeKubik.getText());
verrechnen();
// Es werden JLabels gesettet
betragOgrundG.setText(kostenOGrundg + "");
diffVorjahrOgrundg.setText(diffVJoGrundg + "");
anzKwh.setText(kwh + "");
anzRechnungszeitraum.setText(rechnungszeitraum + "");
aktRechnungsbetrag.setText(aktKosten + "");
diffVJ.setText(diffVJaus + "");
}
});
add(btnOk, gbc);[/CODE]
Java:
package subclasses;
import java.io.*;
import Hauptprogramm.GasPanel;
public class Aufzeichnungen {
GasPanel gaswerte = new GasPanel ();
//Werte speichern
public void gasSchreiben() {
try {
BufferedWriter writer = new BufferedWriter (new FileWriter("Gaswerte.txt", true));
writer.write("Aktuelle Kosten: ");
writer.write(gaswerte.getAktKosten()+gaswerte.kwhEin);
writer.newLine();
writer.write("Stand in kWh: ");
writer.write(Double.toString(gaswerte.kwh)+gaswerte.kwhEin);
writer.newLine();
writer.write("Betrag ohne Grundgebühr: ");
writer.write(Double.toString(gaswerte.kostenOGrundg)+gaswerte.euroEin+" ");
writer.write("Vorjahr: ");
writer.write(Double.toString(gaswerte.diffVJoGrundg)+gaswerte.euroEin);
writer.newLine();
writer.write("Aktueller Rechnungsbetrag: ");
writer.write(Double.toString(gaswerte.aktKosten)+gaswerte.euroEin+" ");
writer.write("Rechnungsbetrag Vorjahr: ");
writer.write(Double.toString(gaswerte.getDiffVJaus())+gaswerte.euroEin);
writer.newLine();
writer.write("Aktueller Stand: ");
writer.write(Double.toString(gaswerte.doubEingabe)+gaswerte.kwhEin);
writer.newLine();
writer.newLine();
writer.close();
}
catch(IOException ioe) {
System.err.println(ioe);
}
}
}