non-static variablen benutzen

plammy

Bekanntes Mitglied
hi..
ich will daten aus textfelder speichern.. das problem ist das sobald ich die variablen in der klasse non-static mache, werden nur 0-en statt in den textfeldern eingegeben Zahlen gespeichert .. Wenn ich aber die Variablen static lasse, kann ich keine leere Datei mehr erstellen, da die vorigen Werten abgespeichert wurden und immer wieder zeichnet...

Java:
public class CreateFile extends JPanel implements ActionListener
{
  
....

static int headerW;
static int headerH;
static int contentW;
static int contentH;
static int footerW;
static int footerH; 
static int tile1W;
static int tile1H;
static int tile2W;
static int tile2H;
static int tile3W;
static int tile3H;
static int bausteinW;
static int bausteinH;
static int bausteinOrangeW;
static int bausteinOrangeH;
static String websiteTF;
static String bausteinTF;
...
Java:
public class GUI extends JFrame implements ActionListener {

..
 public void actionPerformed(ActionEvent object) {
 //Speichern
        if (object.getSource() == save){
         
          
                JFileChooser fc = new JFileChooser();  

                String _headerW = Integer.toString(CreateFile.headerW)+"\r\n";
                String _headerH = Integer.toString(CreateFile.headerH)+"\r\n";
                String _contentW = Integer.toString(CreateFile.contentW)+"\r\n";
                String _contentH = Integer.toString(CreateFile.contentH)+"\r\n";
                String _footerW = Integer.toString(CreateFile.footerW)+"\r\n";
                String _footerH = Integer.toString(CreateFile.footerH)+"\r\n";
                String _tile1W = Integer.toString(CreateFile.tile1W)+"\r\n";
                String _tile1H = Integer.toString(CreateFile.tile1H)+"\r\n";
                String _tile2W = Integer.toString(CreateFile.tile2W)+"\r\n";
                String _tile2H = Integer.toString(CreateFile.tile2H)+"\r\n";
                String _tile3W = Integer.toString(CreateFile.tile3W)+"\r\n";
                String _tile3H = Integer.toString(CreateFile.tile3H)+"\r\n";
                String _bausteinW = Integer.toString(CreateFile.bausteinW)+"\r\n";
                String _bausteinH = Integer.toString(CreateFile.bausteinH)+"\r\n";
                String _bausteinOrangeW = Integer.toString(CreateFile.bausteinOrangeW)+"\r\n";
                String _bausteinOrangeH = Integer.toString(CreateFile.bausteinOrangeH)+"\r\n";
                
                int returnVal = fc.showSaveDialog(this);  
                
                if (returnVal == JFileChooser.APPROVE_OPTION)
                {
                    File saveFile = new File(fc.getSelectedFile()+".txt");  
                  
                    BufferedWriter bw;
                    try 
                        
                    {
                        bw = new BufferedWriter(new FileWriter(saveFile));

                        bw.write(_headerW);
                        bw.write(_headerH);
                        bw.write(_contentW);
                        bw.write(_contentH);
                        bw.write(_footerW);
                        bw.write(_footerH);
                        bw.write(_tile1W);
                        bw.write(_tile1H);
                        bw.write(_tile2W);
                        bw.write(_tile2H);
                        bw.write(_tile3W);
                        bw.write(_tile3H);
                        
                        for(int i=0; i<=CreateFile.editPanel.rectangles.size();i++){
                            bw.write("#");
                            bw.write(_bausteinW);
                            bw.write("*");
                            bw.write(_bausteinH);
                        }
                        
                         for(int i=0; i<=CreateFile.editPanel.rectangles2.size();i++){
                            bw.write("!");
                            bw.write(_bausteinOrangeW);
                            bw.write("-");
                            bw.write(_bausteinOrangeH);
                        }
                         
                        bw.close();
                    } catch(IOException e){
                        System.out.println("Fehler beim Schreiben der Datei. Überprüfen Sie vielleicht Ihre Angaben.");
                    }
                }
        }
 
> das problem ist das sobald ich die variablen in der klasse non-static mache, werden nur 0-en statt in den textfeldern eingegeben Zahlen gespeichert

ohne entsprechenden Code kann man nur raten, was du dabei falsch machst,
z.B. speicherst du die Werte von einem zweiten GUI-Objekt, welches nicht das erste mit Werten != 0 und Anzeige auf dem Bildschirm ist
 
ich würde gerne mehr code posten aber der ist über 1000 zeilen pro klasse...

also in der Klasse CreateFile werden die ganzen Textfelder wo die Eingaben gemacht werden deklariet und initialisiert. In der Klasse GUI werden dann die Benutzereingaben die gemacht wurden in der Textfelder in CreateFile gespeichert
 
die letzten zwei Sätze sind keine ausrechende Information um etwas neues beizutragen, wie du dir sicher denken kannst,
nur als Anmerkung bevor du dich wunderst warum ich gar nichts schreibe 😉

oder doch:
ob doppelte Objekte im Spiel sind, meine Vermutung, läßt sich allein schon durch eine Ausgabe im Konstruktor ziemlich sicher bestätigen

> ich würde gerne mehr code posten aber der ist über 1000 zeilen pro klasse...

wie immer kein Grund, man kann testweise alles und jeden kürzen,
allein dein geposteter Code würde mit EINER Variable headerW schon dasselbe beschreiben,

von all dem Rest hat 99% keine Auswirkung, kann einfach weg und das Problem ist immer noch da,
was verlierst du wenn du ButtonXY zum Malen von Rechteck Z streichst?
ist nur eine Frage des Fleiß, anfangs auch des Könnens, aber Übung macht den (Maler-)Meister, selbst beim Streichen
 
Zuletzt bearbeitet von einem Moderator:
Um SlaterB in kurz beizupflichten:

Bau dir ein kleines Testprogramm und versuche den Fehler zu reproduzieren oder eine neue, funktionsfähige, strukturierte Möglichkeit zu finden. 10 Zeilen Code nicht zu verstehen ist ok aber 1k Zeilen Code wohl eher nicht. ^^

Gruß Vanny
 
Dein generelles Problem ist eher Objektorientierung. Du Musst, wenn du die Variablen nicht als static modifizierst, diese variablen an einem spezifischen Objekt ändern. Und das müsstest du dann auch zugänglich machen, so, dass du immer genau auf diesem Objekt arbeitest.
 
Ich frage mich auch, wie du mit den Problemen die du bisher hier im Forum hattest auf mehrere 1000 Zeilen Code pro Klasse gekommen bist. Da waren teilweise so grundlegende Dinge dabei, das kann doch gar nicht funktionieren. Allein der Code den du hier gepostet hast (und den keiner versteht) zeigt, dass du nicht wirklich was du da eigentlich machst bzw. machen willst.
Dein Problem hat auch ganz sicher nicht mit static Variablen zu tun. Man sollte verstehen was static ist bevor man überhaupt versucht eine GUI zu entwickeln. Ansonsten kann ich vanny nur beipflichten: Fang von 0 an und bau ein Testprogramm in dem genau der Fehler auftritt, der dir zu schaffen macht (und kein anderer).
 
> das problem ist das sobald ich die variablen in der klasse non-static mache, werden nur 0-en statt in den textfeldern eingegeben Zahlen gespeichert

ohne entsprechenden Code kann man nur raten, was du dabei falsch machst,
z.B. speicherst du die Werte von einem zweiten GUI-Objekt, welches nicht das erste mit Werten != 0 und Anzeige auf dem Bildschirm ist
...oder du erzeugst in der actionPerformed von GUI eine neue CreateFile Instanz und versuchst da die Werte rauszuholen. Das geht natürlich nicht weil bei einer frischen Instanz noch keine Werte drin sind. Angesicht deines Codeschnipsels hier is dies vermutlich der Fall.
Die Klase Gui muss die Instanz von CreateFile, in der die Textfelder geändert worden sind, kennen!
Das sind übrigens absolute basics.
Ich habe den Eindruck dass du mit dem was du tun sollst komplett überfordert bist. Musst du dein Projekt für Schule/Uni machen oder nur zum Privatvergnügen?
 

Zurück
Oben