import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;



//BASIERT AUF HERR ZIEMKES RUMPF und meiner Fenster Test1.java

public class DateiTest1 extends JFrame
{

  //Attribute
  private JLabel lb_Header = new JLabel();
  private JTextArea ta_Ausgabe = new JTextArea();
  private JScrollPane jSp1_ta_Ausgabe = new JScrollPane();
  private JButton bt_Lesen = new JButton();
  private JButton bt_Schreiben = new JButton();
  private JButton bt_Ersetzen = new JButton();
  private JTextField tf_1 = new JTextField();
  private JTextField tf_2 = new JTextField();
  private JFileChooser jFileChooser = new JFileChooser();
  private JFileChooser JFileChooser2 = new JFileChooser();

  private FileWriter myWriteFile;
  private FileReader myReadFile;
  private String myFilename = "test.txt";
  


  //Konstruktor
  public DateiTest1(String title)
  {
    //Alles rund ums Fenster
    super(title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) { System.exit(0); }
    });
    setSize(300, 300);
    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);


    ///////////////////////////////
    //Alles rund um die Komponenten
    
    //Label
    lb_Header.setBounds(50, 10, 200, 16);
    lb_Header.setText("Textersetzer");
    lb_Header.setFont(new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(lb_Header);

    //TextArea
    jSp1_ta_Ausgabe.setBounds(50, 50, 200, 150);
    ta_Ausgabe.setText("Hier kommt der Text");
    jSp1_ta_Ausgabe.setViewportView(ta_Ausgabe);
    ta_Ausgabe.setLineWrap(true); //Automatischer Zeilenumbruch
    cp.add(jSp1_ta_Ausgabe);
    
    //Textfields
    tf_1.setBounds(50, 210, 90, 20);
    tf_2.setBounds(160, 210, 90, 20);
    tf_1.setText("zu ersetzen");
    tf_2.setText("durch");
    cp.add(tf_1);
    cp.add(tf_2);
    
    //Button
    bt_Lesen.setBounds(20, 240, 80, 20);
    bt_Lesen.setText("Lesen");
    cp.add(bt_Lesen);
    bt_Lesen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bt_LesenActionPerformed(evt);
      }
    });
    bt_Schreiben.setBounds(110, 240, 80, 20);
    bt_Schreiben.setText("Schreiben");
    cp.add(bt_Schreiben);
    bt_Schreiben.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bt_SchreibenActionPerformed(evt);
      }
    });
    bt_Ersetzen.setBounds(200, 240, 80, 20);
    bt_Ersetzen.setText("Ersetzen");
    cp.add(bt_Ersetzen);
    bt_Ersetzen.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        bt_ErsetzenActionPerformed(evt);
      }
    });
    
    
    setResizable(false);
    setVisible(true);
  }
  
  //Methoden
  public void bt_LesenActionPerformed(ActionEvent evt)
  {
    myFilename = jFileChooserOpenFilename();
    aus_datei_lesen();
  }
  
  public void bt_SchreibenActionPerformed(ActionEvent evt)
  {
    myFilename = JFileChooser2SaveFilename();
    in_datei_schreiben();
  }
  
  public void bt_ErsetzenActionPerformed(ActionEvent evt)
  {
    String zuErsetzen = "";
    zuErsetzen = ta_Ausgabe.getText();
    zuErsetzen = zuErsetzen.replace(tf_1.getText(), tf_2.getText());
    ta_Ausgabe.setText(zuErsetzen);
  }
  
  //JFileChooser kann einfach über den Java Editor eingefügt werden.
  public String jFileChooserOpenFilename() {
    jFileChooser.setDialogTitle("Öffne Datei");
    if (jFileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
      return jFileChooser.getSelectedFile().getPath();   //müsste verständlich sein
    } else {
      return null;
    }
  }
  
  public String JFileChooser2SaveFilename() {
    JFileChooser2.setDialogTitle("Speichere Datei");
    if (JFileChooser2.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
      return JFileChooser2.getSelectedFile().getPath();
    } else {
      return null;
    }
  }
  
  
  
  private void aus_datei_lesen() {
    int testInt;
    String testString= "";

    try {

      myReadFile = new FileReader (myFilename);

      while ((testInt = myReadFile.read()) != -1)
      {
       testString += (char) testInt;
      };
      myReadFile.close();
    } catch (IOException e) {
      System.out.println("Fehler beim Auslesen der Datei " + myFilename);
    }
    ta_Ausgabe.setText(testString);
  }
  
  private void in_datei_schreiben() {
    String testString = ta_Ausgabe.getText();

    try {
      myWriteFile = new FileWriter (myFilename);
      myWriteFile.write(testString);
      myWriteFile.close();
    } catch (IOException e) {
      System.out.println("Fehler beim Erstellen der Datei " + myFilename);
    }

  }
  
  public static void main(String[] args) {
    new DateiTest1("Textersetzer");
  }
}

