# Eingabe in JTextField speichern



## Rave (5. Okt 2009)

Hey, 
Ich würde gerne das meine App mir das was ich in einem JTextField eingebe auch speichert. Wie kann ich das coden ??? Also Frame und JTextField sind ja kein Problem aber dann hörts bei mir auf :rtfm:


----------



## bygones (5. Okt 2009)

was heisst speichern ? 

in einer variable / in eine datei / in eine DB ?


----------



## Rave (5. Okt 2009)

bygones hat gesagt.:


> was heisst speichern ?
> 
> in einer variable / in eine datei / in eine DB ?



Oh sry zu schelcht beschrieben  ehm also in einer .txt zum Beispiel so das er das was ich in dem JTextField eingebe beim nächsten mal wenn ich die App wieder starte wieder in diesem Anzeigt !! 
Hoffe das ist verständlich ^^


----------



## Leroy42 (5. Okt 2009)

Dann den Text "herausholen" via getText(), in einen BufferWriter schreiben
und bei erneutem Programmstart schauen ob du diese Datei bereits erstelltest.
Falls ja dann mit einem BufferedReader den Text auslesen und via setText(...)
in deinem JTextField wieder darstellen lassen.


----------



## Rave (5. Okt 2009)

Leroy42 hat gesagt.:


> Dann den Text "herausholen" via getText(), in einen BufferWriter schreiben
> und bei erneutem Programmstart schauen ob du diese Datei bereits erstelltest.
> Falls ja dann mit einem BufferedReader den Text auslesen und via setText(...)
> in deinem JTextField wieder darstellen lassen.



Ohje da kommt ja was auch mich zu ^^ gibt dazu irgendein Code Beispiel oder Tutorial ??? Ich weiss nich ob ich das so schon hinbekomme, also das mit dem getText() und setText() versteh ich ja noch baer das mit dem BufferedText ist mir sehr neu damit kann ich nich wirklich etwas anfangen ???:L


----------



## bygones (5. Okt 2009)

Galileo Computing :: Java ist auch eine Insel – 13 Dateien und Datenströme


----------



## Leroy42 (5. Okt 2009)

Einfach nach den Begriffen BufferedReader/Writer sowie
FileReader/Writer googeln oder ein entsprechendes Kapitel
in einem Tutorial durcharbeiten:

Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14 Dateien und Datenströme


----------



## Rave (5. Okt 2009)

Also so weit so gut ich hab es soweit das er mir die .txt ausliest und als System.out ausgibt. Nur wie bekomme ich das jetzt in mein JTextField ??? 

Hier mal der Code:

```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 05.10.2009
  * @author
  */

public class App1 extends JFrame {
  // Anfang Attribute
  
  private JTextField Notizen = new JTextField();
  // Ende Attribute

  public App1(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    int frameWidth = 150;
    int frameHeight = 150;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    Notizen.setBounds(0, 0, 150, 150);
    Notizen.setText("txt/notizen1.txt");
    cp.add(Notizen);

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
    
    Reader f = null;
    try {
      f = new FileReader( "txt/notizen1.txt" );
      for (int c; ( c = f.read() ) != -1; )
          System.out.print( (char) c );
    }
    catch ( IOException e ) {
      System.err.println( "Error reading File!" );
    }
    finally {
      try {
        f.close(); } catch ( Exception e ) {  }
      }
  }


  // Anfang Methoden
  // Ende Methoden

  public static void main(String[] args) {
    new App1("App1");
  }
}
```


----------



## ARadauer (5. Okt 2009)

was wird das? ist das für die Schule oder für private Zwecke?


warum ließst du zeichenweise?


```
BufferedReader reader = new BufferedReader(new FileReader(new File("C:/test.txt")));
    String line = reader.readLine();
    if(line==null)
       line ="";
    
    JTextField field = new JTextField(line);
```

....


----------



## Rave (5. Okt 2009)

ARadauer hat gesagt.:


> was wird das? ist das für die Schule oder für private Zwecke?
> 
> 
> warum ließst du zeichenweise?
> ...



Das soll so zu sagen ein kleiner Notizzettel werden!! Einfach zum üben für mich !!! 
Hab das Beispiel aus dem E-Book Java ist auch eine Insel !!! 
Krieg das irgenwie nich sauber in meinen Code rein


----------



## Rave (5. Okt 2009)

Also hab den Code meine App noch mal en bisschen erweitert: 


```
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

import java.io.Writer;
import java.io.FileWriter;
import java.io.IOException;
import java.io.FileReader;
import java.io.Reader;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 05.10.2009
  * @author
  */

public class App1 extends JFrame {
  // Anfang Attribute
  
  private JTextField Notizen = new JTextField();
  // Ende Attribute

  public App1(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    int frameWidth = 150;
    int frameHeight = 150;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten

    Notizen.setBounds(0, 0, 150, 150);
    Notizen.setText("txt/notizen1.txt");
    cp.add(Notizen);

    // Ende Komponenten

    setResizable(false);
    setVisible(true);
    // FILE WRITER
    Writer fw = null;

    try
    {
      fw = new FileWriter( "txt/notizen1.txt" );
      fw.write( "Hat geklappt" );
      fw.append( System.getProperty("line.separator") ); // e.g. "\n"
    }
    catch ( IOException e ) {
      System.err.println( "Konnte Datei nicht erstellen" );
    }
    finally {
      if ( fw != null )
        try { fw.close(); } catch ( IOException e ) { }
    }
    
    // FILE READER
    Reader f = null;
    try {
      f = new FileReader( "txt/notizen1.txt" );
      for (int c; ( c = f.read() ) != -1; )
          System.out.print( (char) c );
    }
    catch ( IOException e ) {
      System.err.println( "Error reading File!" );
    }
    finally {
      try {
        f.close(); } catch ( Exception e ) {  }
      }
  }


  // Anfang Methoden
  // Ende Methoden

  public static void main(String[] args) {
    new App1("App1");
  }
}
```

Nur wie bekomme ich es jetzt dann noch hin das er die Eingaben in das JTextField in die txt schreibt und diese dann beim Neustart des Programms wieder ausliest ???


----------



## AmunRa (5. Okt 2009)

ARadauer hat dir mehr oder weniger den Code schon geschrieben


----------



## Rave (5. Okt 2009)

AmunRa hat gesagt.:


> ARadauer hat dir mehr oder weniger den Code schon geschrieben



Ja aber daraus kann ich nich wirklich erkennen wie ich das was ich in das TextField schriebe in der txt gespeichert wird ???!!!! ???:L


----------



## AmunRa (5. Okt 2009)

```
BufferedWriter buf = new BufferedWriter(new FileWriter("text.txt"));
buf.writeLine(textfield.getText())
```


----------



## Rave (5. Okt 2009)

AmunRa hat gesagt.:


> ```
> BufferedWriter buf = new BufferedWriter(new FileWriter("text.txt"));
> buf.writeLine(textfield.getText())
> ```



Danke werd ich mal ausprobieren ;-)


----------



## ARadauer (6. Okt 2009)

> Krieg das irgenwie nich sauber in meinen Code rein


Trenn deine Zuständigkeiten... 
Irgend ein Objekt ist fürs Lesen und Schreibn zuständig.
Irgend ein Objekt fürs Anzeigen der Daten
Irgend ein Objekt fürs Halten der Daten während die Anwendung läuft.
Irgend ein Objekt zum Reagieren auf den Benutzer...



> Nur wie bekomme ich es jetzt dann noch hin das er die Eingaben in das JTextField in die txt schreibt und diese dann beim Neustart des Programms wieder ausliest ??? [/qoute]
> das Kapitel in der JavaInsel schon gelesen? Ich würd mir das echt mal anschaun...


----------



## Gast2 (6. Okt 2009)

Für ein JTextfield und JTextarea gibts die methoden read und write...
Des müsste doch genau das sein was du suchst...


----------



## Rave (6. Okt 2009)

ARadauer hat gesagt.:


> Trenn deine Zuständigkeiten...
> Irgend ein Objekt ist fürs Lesen und Schreibn zuständig.
> Irgend ein Objekt fürs Anzeigen der Daten
> Irgend ein Objekt fürs Halten der Daten während die Anwendung läuft.
> ...


----------



## ARadauer (6. Okt 2009)

Genau setze den Filenamen in das Textfeld ...Notizen.setText("txt/notizen1.txt");
und gib den Inhalt der Textdatei zeichenweise auf der Console aus ...System.out.print( (char) c );
?????????


----------



## Rave (6. Okt 2009)

ARadauer hat gesagt.:


> Genau setze den Filenamen in das Textfeld ...Notizen.setText("txt/notizen1.txt");
> und gib den Inhalt der Textdatei zeichenweise auf der Console aus ...System.out.print( (char) c );
> ?????????



Da Siehst du mal was ich schon ausprobiere weil ich nich weiter komme :-D xD


----------



## ARadauer (6. Okt 2009)

achh ist ja wurscht:

```
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class App1 extends JFrame {
  // Anfang Attribute
  
  private JTextField notizen = new JTextField();
  // Ende Attribute
 
  public App1(String title) throws IOException {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    int frameWidth = 150;
    int frameHeight = 150;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
 
    notizen.setBounds(0, 0, 150, 150);
    notizen.setText("txt/notizen1.txt"); //<-- ist das dein ernst??????
    cp.add(notizen);
 
    // Ende Komponenten
 
    setResizable(false);
    setVisible(true);
    
    //hab ich doch vorhin schon gepostet!!!!
    BufferedReader reader = new BufferedReader(new FileReader(new File("C:/test.txt")));
    String line = reader.readLine();
    if(line==null)
       line ="";
    
    notizen.setText(line);
  }
 
 
  // Anfang Methoden
  // Ende Methoden
 
  public static void main(String[] args) throws IOException {
    new App1("App1");
  }
}
```


----------



## Rave (6. Okt 2009)

So klappt nun danke ;-) so hab ich das auch verstanden wie du das meintest  !!! Ich dachte ich brauche dann noch den FileWriter den ich vorher drinne hatte !!! 

So aber wie schreibt er das was ich in das JTextField schreibe nun auch in dei txt ??? das klappt i wie noch nicht !?! 
Dazu brauch ich dann ja einen Writer ist das dann auch so ein BufferedWriter oder wie ??


----------



## ARadauer (6. Okt 2009)

Darf ich fragen wie alt du bist?


----------



## Rave (6. Okt 2009)

ARadauer hat gesagt.:


> Darf ich fragen wie alt du bist?



Ja darfst du ^^ 17 :-D


----------



## ARadauer (6. Okt 2009)

so jetzt ließt du dir das nochmal durch Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14 Dateien und Datenströme

Und dann ließt du den ganzen thread nochmal.

Dann versuchst du nochmal eine sinnvolle Fragte zu formulieren...


----------



## Rave (6. Okt 2009)

```
try {
        notizen.write(new FileWriter(line));
     }
catch {
        System.out.println("Fehler");
}
```

Bin ich da auf den richtigem Weg oder mache ich mir das schon wieder zu kompliziert !?!

@ Hab jetzt erst dein Post gelesen !! Mach ich nochmal ;-)


----------



## ARadauer (6. Okt 2009)

die frage ist halt...  wann soll gespeichert werden?

nach dem lesen? das kannst du dir sparen, was soll den drinnen stehen?


```
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class App1 extends JFrame {
   // Anfang Attribute

   private JTextField notizen = new JTextField();
   // Ende Attribute

   public App1(String title) throws IOException {
      // Frame-Initialisierung
      super(title);
      setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
      
      this.addWindowListener(new WindowAdapter() {
         @Override
         public void windowClosing(WindowEvent e) {
            try {
               writeStringToFile(notizen.getText());
            } catch (IOException e1) {
               e1.printStackTrace();
            }            
         }
        
      });
      
      int frameWidth = 150;
      int frameHeight = 150;
      setSize(frameWidth, frameHeight);
      Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
      int x = (d.width - getSize().width) / 2;
      int y = (d.height - getSize().height) / 2;
      setLocation(x, y);
      Container cp = getContentPane();
      cp.setLayout(null);
      // Anfang Komponenten

      notizen.setBounds(0, 0, 150, 150);
      cp.add(notizen);


      setResizable(false);
      setVisible(true);

      

      notizen.setText(readStringFromFile());
   }


   public String readStringFromFile() throws IOException{
      BufferedReader reader = new BufferedReader(new FileReader(new File("C:/test.txt")));
      String line = reader.readLine();
      if(line==null)
         line ="";
      return line;
   }
   
   public void writeStringToFile(String line)  throws IOException{
      BufferedWriter writer = new BufferedWriter(new FileWriter(new File("C:/test.txt")));
      writer.write(line);
      writer.flush();
   }
   

   public static void main(String[] args) throws IOException {
      new App1("App1");
   }
   
}
```
das soll aber nur ein Beispiel sein. Das ist von Seiten der objektorietierung und Exception Handling nicht besonders sinnvoll...


----------



## Rave (6. Okt 2009)

```
public void writeStringToFile(String line)  throws IOException{
      BufferedWriter writer = new BufferedWriter(new FileWriter(new File("C:/test.txt")));
      writer.write(line);
      writer.flush();
   }
```

Ob dus mir nun glaubst oder nicht ^^ sowas in der Art hab ich auch grade geschrieben !!! Aber nur in der Art ^^ er hat zwar etwas reingeschrieben aber immer gleich wieder gelöscht ^^ warum auch immer !!! Aber so wie du das da hast funktioniert es !!! 
Ich verstehe es auch wie es funktioniert  ausser was diese Zeile macht:

```
writer.flush();
```

Was macht diese ???


----------



## ARadauer (6. Okt 2009)

Java Platform SE 6


----------



## ARadauer (6. Okt 2009)

ok 





> Flushes the stream.


 ist nicht sehr aussage kräftig.... sorgt dafür das das was im buffer steht auf jeden fall geschrieben wird. bin mir aber nicht sicher ob es überhaupt an dieser stelle notwendig ist.


----------



## Rave (6. Okt 2009)

Okay danke, auch für die Mühe mich von dem Schlauch runter zu holen auf dem ich stand :-D 

LG Rave ;-)


----------

