Von einem Menü Methode aus anderer Klasse ausführen, die errechnete Werte in Datei schreibt.

M

MasterShredder

Aktives Mitglied
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??).

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.

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);

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);
                
            }
        }
}
 
Robert Zenz

Robert Zenz

Bekanntes Mitglied
Deine "Aufzeichnungen" Klasse haelt *eine* Instanz von "GasPanel", nicht *die* Instanz von "GasPanel" welche angezeigt wird. Also entweder verwendest du die Instanz in "Aufzeichnungen", oder du gibts die Instanz welche du im Konstruktor vom "Verbrauchsrechner" erzeugt an die "Aufzeichnungen" Klasse weiter.

Als Anmerkung so nebenher, ich glaube nicht dass "euroEin" so funktioniert. Ein "Char" repraesentiert nur ein Byte, du versucht aber einen CodePoint von zwei Bytes zu setzen. Ich glaube "String euroEins = new String(new int[] { 0x20AC }, 0, 1)" sollte korrekter sein und funktionieren...kann mich da aber auch irren.
 
M

MasterShredder

Aktives Mitglied
Also entweder verwendest du die Instanz in "Aufzeichnungen", oder du gibts die Instanz welche du im Konstruktor vom "Verbrauchsrechner" erzeugt an die "Aufzeichnungen" Klasse weiter.
OK. Also ich habe mich dafür entschieden die "GasPanel" Instanz an "Aufzeichnungen" weiter zu geben, da sie ja eine Erweiterung von JPanel ist und(so wie ich Instanz versanden habe) als konkretes Objekt in ein JFrame(in die Main,run) gehört.

Das Ganze habe ich nun so umgesetzt: Ich hoffe mal, dass dies so gemeint war:). Also "Aufzeichnungen" einen Konstruktor verpasst.

Aufzeichnungen:
package subclasses;

import java.io.*;
import Hauptprogramm.*;

public class Aufzeichnungen {  
   
    GasPanel gpWerte;
    StromPanel spWerte;
   
public Aufzeichnungen(GasPanel gp, StromPanel sp) {
    gpWerte=gp;
    spWerte=sp;
}

//Werte speichern
public void gasSchreiben() {
       
        try {
            BufferedWriter  writer = new BufferedWriter (new FileWriter("Gaswerte.txt", true));
            writer.write("Aktuelle Kosten: ");
            writer.write(gpWerte.aktKosten+gpWerte.euroEin+"  ");
            writer.newLine();
            writer.write("Stand in kWh: ");
            writer.write(gpWerte.kwh+gpWerte.kwhEin);
            writer.newLine();
            writer.write("Betrag ohne Grundgebühr: ");
            writer.write(gpWerte.kostenOGrundg+gpWerte.euroEin+"    ");
            writer.write("Vorjahr: ");
            writer.write(gpWerte.diffVJoGrundg+gpWerte.euroEin+"  ");
            writer.newLine();
            writer.write("Aktueller Rechnungsbetrag: ");
            writer.write(gpWerte.aktKosten+gpWerte.euroEin+"    ");
            writer.write("Rechnungsbetrag Vorjahr: ");
            writer.write(gpWerte.diffVJaus+gpWerte.euroEin+"  ");
            writer.newLine();
            writer.write("Aktueller Stand: ");
            writer.write(gpWerte.doubEingabe+gpWerte.kwhEin);
            writer.newLine();
            writer.newLine();
            writer.close();
        }
       
            catch(IOException ioe) {
                System.err.println(ioe);
               
            }
        }
}

Java:
public class Verbrauchsrechner {  

    public void run() {
    JFrame frame = new JFrame();
    GasPanel gp = new GasPanel();
    StromPanel sp = new StromPanel();
    Aufzeichnungen aufzeichnung = new Aufzeichnungen(gp, sp);
//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();
           
        }
    });

Es funktioniert auch **freu freu**.

Nur mit "euroEin" hast du recht. Das funktioniert "hier" jetzt nicht mehr. Da muss ich mich jetzt aber noch extra informieren, einlesen.
 
M

MasterShredder

Aktives Mitglied
Soo, da scheinbar zu Aufzeichnungen nichts mehr kommt, denke ich mal das geht so in Ordnung.

Zu dem Euro Symbol.
String euroEins = new String(new int[] { 0x20AC }, 0, 1);
Habe es jetzt auf diese Methode gemacht. Funktioniert, wird nun in die Datei geschrieben.

Nur was ist da jetzt anders? Mein Grund dies so mit Char zu machen war es, dass ich das Euro Zeichen als ein Unicode Zeichen einfügen wollte(ist dies überhaupt nötig oder sinnvoll(auch jetzt die hochgestellte 3 für Kubik)?
Und was ist das jetzt für eine Methode, wie rufe ich das Euro Symbol jetzt auf und als was(Unicode,ASCII??)?
 
mihe7

mihe7

Top Contributor
Nur was ist da jetzt anders?
Anders ist, dass euroEin jetzt ein String ist. Ein char ist dagegen eine 16-Bit, vorzeichenlose Ganzzahl. Wenn Du den +-Operator auf ein double und einen String anwendest, dann findet eine String-Konkatenation statt. Wendest Du dagegen den +-Operator auf ein double und ein char an, wird eine Gleitkomma-Addition durchgeführt.

Den String oben kannst Du aber auch einfach so definieren:
Code:
String euroEin = "\u20ac";
Also wie das char, nur mit doppelten Anführungszeichen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Befehle in einem Menü aktivieren Java Basics - Anfänger-Themen 1
J Zusätzliches Menü in einem Terminal erstellen Java Basics - Anfänger-Themen 0
N Von einem Menü in Untermenü Java Basics - Anfänger-Themen 3
B Was mach ich falsch mit einem Menü in Swing Java Basics - Anfänger-Themen 2
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
B Häufigkeit einzelner Zahlen in einem Array Java Basics - Anfänger-Themen 6
D Zufällige Auswahl aus einem angelegten Array? Java Basics - Anfänger-Themen 10
A Löschen von Leerzeichen in einem char array ohne methoden Java Basics - Anfänger-Themen 6
T Methode schreiben, die einem Array ein Stringelement hinzufügt, wenn dieses noch nicht enthalten ist. Java Basics - Anfänger-Themen 6
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
R Mehrere Buchstaben aus einem String entfernen Java Basics - Anfänger-Themen 1
J Alle .java Dateien von einem Verzeichnis in eine Zip speichern Java Basics - Anfänger-Themen 2
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
H Minimum in einem Array bestimmen Java Basics - Anfänger-Themen 7
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
P Auswahl bei einem Videoverleih limitieren Java Basics - Anfänger-Themen 4
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
P Ein Objekt nach einem String durchsuchen? Java Basics - Anfänger-Themen 7
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
O Java Weinachtsbaum in einem Bilderramen Java Basics - Anfänger-Themen 5
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
G Methoden Methode die aus einem Array ein Index ausgibt? Java Basics - Anfänger-Themen 2
J Verschieben von Buchstaben in einem String um vorgegebene Anzahl von Zeichen innerhalb eines weiteren String Java Basics - Anfänger-Themen 12
Kingamadeus2000 Anzahl der Ziffern der kürzesten Zahl aus einem zurückliefern Java Basics - Anfänger-Themen 1
U Muster in einem Array erkennen Java Basics - Anfänger-Themen 8
Y Wie greift man auf die Knoten in einem Binärbaum zu? Java Basics - Anfänger-Themen 5
rafi072001 Lesen aus einem Excel File Java Basics - Anfänger-Themen 10
Y Wie kann man überprüfen, ob bei einem Print Befehl tatsächlich etwas geprintet wurde? Java Basics - Anfänger-Themen 4
J Lösungen zu einem Lückentext finden Java Basics - Anfänger-Themen 0
Z Char Array an zufälligen stellen mit einem "x" füllen. Java Basics - Anfänger-Themen 4
L Alle Ziele in einem Raster abknallen Java Basics - Anfänger-Themen 17
T Auf einem Schachbrett bewegen programmieren Java Basics - Anfänger-Themen 2
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
H 3 Comparatoren zu einem zusammenfassen - Chaining... Java Basics - Anfänger-Themen 15
N LocalTime einem Objekt zuweisen Java Basics - Anfänger-Themen 2
B Berechnung der Position von Kinderelemente von einem Elternknoten Java Basics - Anfänger-Themen 23
N Länge eines Arrays in einem Objekt testen Java Basics - Anfänger-Themen 51
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
J Elemente in einem 2D-Array summieren Java Basics - Anfänger-Themen 6
J String aus einem Array entfernen Java Basics - Anfänger-Themen 10
L Breadth-First Search statt einem Pfad, alle Pfade herausfinden Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
P Arraylist zu einem Array bringen mit Verschachtelung Java Basics - Anfänger-Themen 11
S Ersetzen eines Asterix in einem String Java Basics - Anfänger-Themen 8
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
M Von einem JTextField Doublewerte entgegennehmen Java Basics - Anfänger-Themen 2
M Ist es möglich, das größte und zweitgrößte element in einem Array mit nur einer Schleife ausfindig zu machen ? Java Basics - Anfänger-Themen 19
H Objekt aus einem Array löschen Java Basics - Anfänger-Themen 1
F Aufgabe: Abstand von einem Punkt zu einem anderen Punkt Java Basics - Anfänger-Themen 10
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
FelixN RegEx aus einem String als String-Array zurückgeben Java Basics - Anfänger-Themen 8
B Werte aus einem Unterprogramm in ein Array schreiben Java Basics - Anfänger-Themen 2
L Nur Bestimmte Werte aus einem Array in ein anderes Speichern Java Basics - Anfänger-Themen 11
J erstes Vorkommen eines Chars aus einem String entfernen Java Basics - Anfänger-Themen 3
F Summe in einem Array bestimmen Java Basics - Anfänger-Themen 3
D Alle Möglichkeiten, n-Anzahl aus Elementen aus einem Array zu wählen, ausgeben? Java Basics - Anfänger-Themen 23
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
B String zu einem bestehenden String hinzufügen Java Basics - Anfänger-Themen 9
F Sektglasaufgabe aus einem Programmierbuch Java Basics - Anfänger-Themen 7
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
topi relativer Pfad in einem Runnable JAR file Java Basics - Anfänger-Themen 12
B Liste von Tagen generieren ab einem bestimmten Datum und Endedatum Java Basics - Anfänger-Themen 4
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
D Werte aus einem BinärBaum in einem Array speichern Java Basics - Anfänger-Themen 1
E Zahlen von einem Array mit zahlen von zweitem Array vergleichen Java Basics - Anfänger-Themen 27
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
S Was bewirkt ganz genau throw hinter einem Funktionsnamen? Java Basics - Anfänger-Themen 14
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
F Mehrere Exceptions in einem Catch-Block abfangen Java Basics - Anfänger-Themen 12
N Zeichen in einem Textfeld zählen und hinterlegen Java Basics - Anfänger-Themen 6
W 2 JPanel in einem JFrame Java Basics - Anfänger-Themen 4
O String von vorne nach hinten an einem Zeichen Java Basics - Anfänger-Themen 10
F Buchstaben in einem String vertauschen (Ohne replace) Java Basics - Anfänger-Themen 10
O findRoot Methode schreiben in einem Intervall Java Basics - Anfänger-Themen 31
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
S Fragen zu einem Rechentrainer Java Basics - Anfänger-Themen 2
S Schiffe versenken - Zufallszahlen in einem Array Java Basics - Anfänger-Themen 6
J Datentypen Komm in einem Android Buch mit Java nicht weiter... Java Basics - Anfänger-Themen 7
B Prüfen, ob es schon einen Termin gibt in einem Zeitraum Java Basics - Anfänger-Themen 5
R Vererbung werte von einem Objekt aus ein anderes übertragen Java Basics - Anfänger-Themen 7
Dimax Leerzeilen aus einem String entfernen Java Basics - Anfänger-Themen 61
N Abfragen eines Textes aus einem JTextField in Java, Funktion, CardLayout, Java Basics - Anfänger-Themen 2
K In einem Case gefüllte Arraylist in einer anderen Case ausgeben Java Basics - Anfänger-Themen 2
J Mehrere paintComponenten in einem Programm Java Basics - Anfänger-Themen 0
A In einem String alle Eigennamen zählen Java Basics - Anfänger-Themen 6
F Mehrere Buttons mit einem ActionListener abdecken Java Basics - Anfänger-Themen 24
T Auslagern von Methoden bei einem JFrame Java Basics - Anfänger-Themen 6
Dilara_K Abstand zwischen den Doppelwerten in einem Array herausfinden Java Basics - Anfänger-Themen 20
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
S Sequenz von Zahlen bei einem Stack möglich oder nicht möglich? Java Basics - Anfänger-Themen 5
M Methoden Zwei Methoden in einem Program laufen lassen...aber wie? Java Basics - Anfänger-Themen 2
T Schauen ob eine Ziffer in einem String-Array häufiger vorkommt Java Basics - Anfänger-Themen 8
A Harshad Zahlen sollen in einem Intervall ausgegeben werden Java Basics - Anfänger-Themen 8

Ähnliche Java Themen


Oben