# Suche einfache Möglichkeit zum Speichern



## Oni (8. Okt 2004)

Servus,
also ich habe jetzt sowas ähnliches wie ein telefonbuch geschrieben. man kann über textfelder leute eintragen und über eine suchfunktion auslesen.
das klappt auch soweit. jetzt würde ich gerne die einträge speichern und wenn das programm das nächste mal gestartet wird, sollten die automatisch wieder da sein.

ich habe keine ahnung ob das überhaupt geht und wenn es geht wie? und bitte nicht einfach nur ein link auf irgend ne sun seite. bin anfänger und was die da schreiben versteh ich immer nur zur hälft, liegt vielleicht auch an meinen englisch kenntnissen   

der code sie so aus 

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

public class Telefonbuch extends Frame implements ActionListener, WindowListener
{
	private int x = 20, o = 0;
     private Telefonbuch tele;
     private Button suchen, neuerEintrag;
     private MenuItem close, change;
     private String antiFormV;
     private String antiFormN;
     private String nameN;
     private String nameV;
     private String email;
     private String festNr;
     private String mobilNr;
     private String gesuchtN;
     private String gesuchtV;
     private String leer;
     private TextArea anzeigen;
     private TextField suchEingabeN;
     private TextField suchEingabeV;

     private TextField neuerN;
     private TextField neuerV;
     private TextField neueTele;
     private TextField neueMobil;
     private TextField neueEmail;

     private int go = 0, go2 = 0, s = 0, s2 = 0, y = 0;
      Telefonbuch[] verzeichnis = new Telefonbuch[150];

	public static void main(String[] args)
     	{
          Frame f = new Telefonbuch();

          f.setVisible(true);
          f.setSize(400, 420);
          f.setLocation(50, 50);
          }

     public Telefonbuch()
     	{
          setTitle("Telefonbuch");
          setLayout(null);
/* MenuBar */
          MenuBar b1 = new MenuBar();
/* Menu 1 */
          Menu m1 = new Menu("Datei");

          close = new MenuItem("Schliessen");
          m1.add(close);
          close.addActionListener(this);

          b1.add(m1);
          setMenuBar(b1);

          Label l1 = new Label("Nachname:");
		add(l1);
          l1.setBounds(10, 90, 70, 25);
          suchEingabeN = new TextField();
          add(suchEingabeN);
          suchEingabeN.setBounds(80, 90, 100, 25);
          suchEingabeN.addActionListener(this);

          Label l2 = new Label("Vorname:");
		add(l2);
          l2.setBounds(10, 60, 70, 25);
          suchEingabeV = new TextField();
          add(suchEingabeV);
          suchEingabeV.setBounds(80, 60, 100, 25);
          suchEingabeV.addActionListener(this);

          suchen = new Button("Suchen");
          add(suchen);
          suchen.setBounds(190, 60, 80, 25);
          suchen.addActionListener(this);

          anzeigen = new TextArea();
          add(anzeigen);
          anzeigen.setBounds(10, 130, 380, 105);

     /* ------------------------------------------------*/

          Label l3 = new Label("Vorname:");
		add(l3);
          l3.setBounds(10, 240, 90, 25);
          neuerV = new TextField();
          add(neuerV);
          neuerV.setBounds(120, 240, 120, 25);
          neuerV.addActionListener(this);

          Label l4 = new Label("Nachname:");
		add(l4);
          l4.setBounds(10, 270, 90, 25);
          neuerN = new TextField();
          add(neuerN);
          neuerN.setBounds(120, 270, 120, 25);
          neuerN.addActionListener(this);

          Label l5 = new Label("Telefonnummer:");
		add(l5);
          l5.setBounds(10, 300, 90, 25);
          neueTele = new TextField();
          add(neueTele);
          neueTele.setBounds(120, 300, 120, 25);
          neueTele.addActionListener(this);

          Label l6 = new Label("Mobilnummer:");
		add(l6);
          l6.setBounds(10, 330, 90, 25);
          neueMobil = new TextField();
          add(neueMobil);
          neueMobil.setBounds(120, 330, 120, 25);
          neueMobil.addActionListener(this);

          Label l7 = new Label("Email");
		add(l7);
          l7.setBounds(10, 360, 90, 25);
          neueEmail = new TextField();
          add(neueEmail);
          neueEmail.setBounds(120, 360, 120, 25);
          neueEmail.addActionListener(this);

          neuerEintrag = new Button("Neuer Eintrag");
          add(neuerEintrag);
          neuerEintrag.setBounds(280, 360, 80, 25);
          neuerEintrag.addActionListener(this);

          this.addWindowListener(this);
          }


     public void windowClosing(WindowEvent event)
     	{
          System.exit(0);
          }

     public void windowIconified(WindowEvent event)
     	{
          }

     public void windowOpened(WindowEvent event)
     	{
          }

     public void windowClosed(WindowEvent event)
     	{
          }

     public void windowDeiconified(WindowEvent event)
     	{
          }

     public void windowActivated(WindowEvent event)
     	{
          }

     public void windowDeactivated(WindowEvent event)
     	{
          }


     public void actionPerformed(ActionEvent event)
     	{
          if(event.getSource() == suchen)
          	{
               go = 0;
               go2 = 0;

               antiFormN = suchEingabeN.getText();
               gesuchtN = antiFormN.replaceAll(" ", "");
               if(gesuchtN.equals(""))
               	{
                    }
               else
               	{
                    go = 1;
                    }

               antiFormV = suchEingabeV.getText();
               gesuchtV = antiFormV.replaceAll(" ", "");
               if(gesuchtV.equals(""))
               	{
                    }
               else
               	{
                    go2 = 1;
                    }

               s = 0;
               s2 = 0;
               suchEingabeV.setText("");
               suchEingabeN.setText("");
               anzeigen.setText("");
               }
          if(event.getSource() == close)
          	{
               System.exit(0);
               }

          if(event.getSource() == neuerEintrag)
          	{
               go = 0;
               go2 = 0;
               s = 0;
               s2 = 0;
               suchEingabeV.setText("");
               suchEingabeN.setText("");

               while(verzeichnis[o] != null)
               	{
                    o++;
                    }
               verzeichnis[o] = new Telefonbuch();
               verzeichnis[o].nameN = neuerN.getText();
     		verzeichnis[o].nameV = neuerV.getText();
     		verzeichnis[o].festNr = neueTele.getText();
         		verzeichnis[o].mobilNr = neueMobil.getText();
          	verzeichnis[o].email = neueEmail.getText();

               neuerN.setText("");
               neuerV.setText("");
               neueTele.setText("");
               neueMobil.setText("");
               neueEmail.setText("");
               anzeigen.setText("");
               }
          repaint();
          }

   	 public void paint(Graphics g)
		{
          verzeichnis[0] = new Telefonbuch();
          verzeichnis[1] = new Telefonbuch();
          verzeichnis[2] = new Telefonbuch();
          verzeichnis[3] = new Telefonbuch();

          verzeichnis[0].nameN = "Test1";
     	verzeichnis[0].nameV = "test1";
     	verzeichnis[0].festNr = "06555/XXXXXX";
     	verzeichnis[0].mobilNr = "0173/XXXXXXX";
          verzeichnis[0].email = "test1@";

          verzeichnis[1].nameN = "Test2";
     	verzeichnis[1].nameV = "test2";
     	verzeichnis[1].festNr = "06555/XXXXXX";
     	verzeichnis[1].mobilNr = "0173/XXXXXXX";
          verzeichnis[1].email = "test2@";

          verzeichnis[2].nameN = "Test3";
     	verzeichnis[2].nameV = "test3";
     	verzeichnis[2].festNr = "06555/XXXXXX";
     	verzeichnis[2].mobilNr = "0173/XXXXXXX";
          verzeichnis[2].email = "test3@";

          verzeichnis[3].nameN = "Test4";
     	verzeichnis[3].nameV = "test4";
     	verzeichnis[3].festNr = "06555/XXXXXX";
     	verzeichnis[3].mobilNr = "0173/XXXXXXX";
          verzeichnis[3].email = "test4@";

		if((go == 1))
          	{
     		while(! verzeichnis[s].nameN.equals(gesuchtN))
                    s++;
               	if(verzeichnis[s].nameN.equals(gesuchtN))
                    	anzeigen.setText("Vorname: " + verzeichnis[s].nameV + "\n" + "Nachname: " + verzeichnis[s].nameN + "\n"
               		+ "Telefonnummer: " + verzeichnis[s].festNr + "\n" + "Handynummer: " + verzeichnis[s].mobilNr + "\n" + "Email: " + verzeichnis[s].email);
               }
           if(go2 == 1)
          	{
     		while(! verzeichnis[s2].nameV.equals(gesuchtV))
     			s2++;
                      if(verzeichnis[s2].nameV.equals(gesuchtV))
          			anzeigen.setText("Vorname: " + verzeichnis[s2].nameV + "\n" + "Nachname: " + verzeichnis[s2].nameN + "\n"
               		+ "Telefonnummer: " + verzeichnis[s2].festNr + "\n" + "Handynummer: " + verzeichnis[s2].mobilNr + "\n" + "Email: " + verzeichnis[s2].email);
               }
           }
}
```


----------



## meez (8. Okt 2004)

Wenn du den View (Frame) und das Model (Telefonbuch) trennst, bzw. eigene Klassen erstellst, kannst du das ganze Telefonbuch-Object abspeichern...


----------



## Oni (8. Okt 2004)

ich habe das noch nie auf die reihe bekommen eins meiner programm auseinander zureißen und ne 2te klasse zu machen.
ich bekomme da 100 fehler beim kompilieren und kann von denen meist nur 50 bereinigen kann.
aber nur mal angenommen ich bekomme es dieses mal hin(für tips wäre ich dankbar).
wie speicher ich dann das objekt?


----------



## meez (8. Okt 2004)

Speichern:


```
Telefonbuch t = ... ; //Objeckt, welches gespeichert werden soll
String file = ..; // Datei zum Speichern

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(t);
out.close();
```

Einlesen:


```
String file = ..; // Datei zum Speichern

ObjectInputStream in= new ObjectInputStream(new FileIntputStream(file));
Telefonbuch t  = (Teleonbuch) in.readObject();
in.close();
```


----------



## bygones (8. Okt 2004)

das nennt sich dann Serialisieren - dazu muss das zu serialisierende Objekt (Telefonbuch) das Interfach Serializable implementieren...


----------



## Oni (8. Okt 2004)

gut danke, aber wo im code muss das hin in die main-methode?
ich habe das jetzt so umgebaut. ist das so wie du gemeint hast?
es wird auch ohne fehler kompiliert aber ich kann jetzt nichts mehr eingeben oder auslesen. was muss ich noch abändern


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

public class Telefonbuch extends Container implements ActionListener, WindowListener
{
	private int x = 20, o = 0;
     private Telefonbuch tele;
     private Button suchen, neuerEintrag;
     private static MenuItem close, change;
     private String antiFormV;
     private String antiFormN;
     private String nameN;
     private String nameV;
     private String email;
     private String festNr;
     private String mobilNr;
     private String gesuchtN;
     private String gesuchtV;
     private String leer;
     private TextArea anzeigen;
     private TextField suchEingabeN;
     private TextField suchEingabeV;

     private TextField neuerN;
     private TextField neuerV;
     private TextField neueTele;
     private TextField neueMobil;
     private TextField neueEmail;

     private int go = 0, go2 = 0, s = 0, s2 = 0, y = 0;
      Telefonbuch[] verzeichnis = new Telefonbuch[150];

	public static void main(String[] args)
     	{
          Telefonbuch t = new Telefonbuch();
          Frame f = new Frame();

          f.setVisible(true);
          f.setSize(400, 420);
          f.setLocation(50, 50);
          f.add(t);
          f.addWindowListener(t);

          f.setTitle("Telefonbuch");
          f.setLayout(null);
/* MenuBar */
          MenuBar b1 = new MenuBar();
/* Menu 1 */
          Menu m1 = new Menu("Datei");

          close = new MenuItem("Schliessen");
          m1.add(close);
          close.addActionListener(t);

          b1.add(m1);
          f.setMenuBar(b1);
          }

     public Telefonbuch()
     	{
          Label l1 = new Label("Nachname:");
		add(l1);
          l1.setBounds(10, 90, 70, 25);
          suchEingabeN = new TextField();
          add(suchEingabeN);
          suchEingabeN.setBounds(80, 90, 100, 25);
          suchEingabeN.addActionListener(this);

          Label l2 = new Label("Vorname:");
		add(l2);
          l2.setBounds(10, 60, 70, 25);
          suchEingabeV = new TextField();
          add(suchEingabeV);
          suchEingabeV.setBounds(80, 60, 100, 25);
          suchEingabeV.addActionListener(this);

          suchen = new Button("Suchen");
          add(suchen);
          suchen.setBounds(190, 60, 80, 25);
          suchen.addActionListener(this);

          anzeigen = new TextArea();
          add(anzeigen);
          anzeigen.setBounds(10, 130, 380, 105);

     /* ------------------------------------------------*/

          Label l3 = new Label("Vorname:");
		add(l3);
          l3.setBounds(10, 240, 90, 25);
          neuerV = new TextField();
          add(neuerV);
          neuerV.setBounds(120, 240, 120, 25);
          neuerV.addActionListener(this);

          Label l4 = new Label("Nachname:");
		add(l4);
          l4.setBounds(10, 270, 90, 25);
          neuerN = new TextField();
          add(neuerN);
          neuerN.setBounds(120, 270, 120, 25);
          neuerN.addActionListener(this);

          Label l5 = new Label("Telefonnummer:");
		add(l5);
          l5.setBounds(10, 300, 90, 25);
          neueTele = new TextField();
          add(neueTele);
          neueTele.setBounds(120, 300, 120, 25);
          neueTele.addActionListener(this);

          Label l6 = new Label("Mobilnummer:");
		add(l6);
          l6.setBounds(10, 330, 90, 25);
          neueMobil = new TextField();
          add(neueMobil);
          neueMobil.setBounds(120, 330, 120, 25);
          neueMobil.addActionListener(this);

          Label l7 = new Label("Email");
		add(l7);
          l7.setBounds(10, 360, 90, 25);
          neueEmail = new TextField();
          add(neueEmail);
          neueEmail.setBounds(120, 360, 120, 25);
          neueEmail.addActionListener(this);

          neuerEintrag = new Button("Neuer Eintrag");
          add(neuerEintrag);
          neuerEintrag.setBounds(280, 360, 80, 25);
          neuerEintrag.addActionListener(this);
          }


     public void windowClosing(WindowEvent event)
     	{
          System.exit(0);
          }

     public void windowIconified(WindowEvent event)
     	{
          }

     public void windowOpened(WindowEvent event)
     	{
          }

     public void windowClosed(WindowEvent event)
     	{
          }

     public void windowDeiconified(WindowEvent event)
     	{
          }

     public void windowActivated(WindowEvent event)
     	{
          }

     public void windowDeactivated(WindowEvent event)
     	{
          }


     public void actionPerformed(ActionEvent event)
     	{
          if(event.getSource() == suchen)
          	{
               go = 0;
               go2 = 0;

               antiFormN = suchEingabeN.getText();
               gesuchtN = antiFormN.replaceAll(" ", "");
               if(gesuchtN.equals(""))
               	{
                    }
               else
               	{
                    go = 1;
                    }

               antiFormV = suchEingabeV.getText();
               gesuchtV = antiFormV.replaceAll(" ", "");
               if(gesuchtV.equals(""))
               	{
                    }
               else
               	{
                    go2 = 1;
                    }

               s = 0;
               s2 = 0;
               suchEingabeV.setText("");
               suchEingabeN.setText("");
               anzeigen.setText("");
               }
          if(event.getSource() == close)
          	{
               System.exit(0);
               }

          if(event.getSource() == neuerEintrag)
          	{
               go = 0;
               go2 = 0;
               s = 0;
               s2 = 0;
               suchEingabeV.setText("");
               suchEingabeN.setText("");

               while(verzeichnis[o] != null)
               	{
                    o++;
                    }
               verzeichnis[o] = new Telefonbuch();
               verzeichnis[o].nameN = neuerN.getText();
     		verzeichnis[o].nameV = neuerV.getText();
     		verzeichnis[o].festNr = neueTele.getText();
         		verzeichnis[o].mobilNr = neueMobil.getText();
          	verzeichnis[o].email = neueEmail.getText();

               neuerN.setText("");
               neuerV.setText("");
               neueTele.setText("");
               neueMobil.setText("");
               neueEmail.setText("");
               anzeigen.setText("");
               }
          repaint();
          }

   	 public void paint(Graphics g)
		{
          verzeichnis[0] = new Telefonbuch();
          verzeichnis[1] = new Telefonbuch();
          verzeichnis[2] = new Telefonbuch();
          verzeichnis[3] = new Telefonbuch();

          verzeichnis[0].nameN = "Test1";
     	verzeichnis[0].nameV = "test1";
     	verzeichnis[0].festNr = "06555/XXXXXX";
     	verzeichnis[0].mobilNr = "0173/XXXXXXX";
          verzeichnis[0].email = "test1";

          verzeichnis[1].nameN = "Test2";
     	verzeichnis[1].nameV = "test2";
     	verzeichnis[1].festNr = "06555/XXXXXX";
     	verzeichnis[1].mobilNr = "0173/XXXXXXX";
          verzeichnis[1].email = "test2";

          verzeichnis[2].nameN = "Test3";
     	verzeichnis[2].nameV = "test3";
     	verzeichnis[2].festNr = "06555/XXXXXX";
     	verzeichnis[2].mobilNr = "0173/XXXXXXX";
          verzeichnis[2].email = "test3";

          verzeichnis[3].nameN = "Test4";
     	verzeichnis[3].nameV = "test4";
     	verzeichnis[3].festNr = "06555/XXXXXX";
     	verzeichnis[3].mobilNr = "0173/XXXXXXX";
          verzeichnis[3].email = "test4";

		if(go == 1)
          	{
     		while(! verzeichnis[s].nameN.equals(gesuchtN))
                    s++;
               	if(verzeichnis[s].nameN.equals(gesuchtN))
                    	anzeigen.setText("Vorname: " + verzeichnis[s].nameV + "\n" + "Nachname: " + verzeichnis[s].nameN + "\n"
               		+ "Telefonnummer: " + verzeichnis[s].festNr + "\n" + "Handynummer: " + verzeichnis[s].mobilNr + "\n" + "Email: " + verzeichnis[s].email);
               }
           if(go2 == 1)
          	{
     		while(! verzeichnis[s2].nameV.equals(gesuchtV))
     			s2++;
                      if(verzeichnis[s2].nameV.equals(gesuchtV))
          			anzeigen.setText("Vorname: " + verzeichnis[s2].nameV + "\n" + "Nachname: " + verzeichnis[s2].nameN + "\n"
               		+ "Telefonnummer: " + verzeichnis[s2].festNr + "\n" + "Handynummer: " + verzeichnis[s2].mobilNr + "\n" + "Email: " + verzeichnis[s2].email);
               }
           }
}]
```


----------



## bygones (8. Okt 2004)

die methoden kannst du einfach in die Klasse tun wo du willst... wie gesagt Serializable nicht vergessen zu implementieren (hat zwar keinen Methoden, muss aber benutzt werden...)

wie du es aufrufst ist dir überlassen. Du kannst entweder einen neuen Button machen - bei dem die speicher funktion aufgerufen wird oder du speicherst wenn der User schließt (hast ja schon den WindowListener implementiert (also in der Methode windowClosing z.b. bevor du alles beendest). Einlesen kannst du auch über Button machen oder beim starten des programms...


----------



## meez (8. Okt 2004)

Wo ist da der Unterschied zum ersten...abgesehen, das du jetzt von der Superklasse von JFrame erbst... :bahnhof:


----------



## bygones (8. Okt 2004)

meez hat gesagt.:
			
		

> Wo ist da der Unterschied zum ersten...abgesehen, das du jetzt von der Superklasse von JFrame erbst... :bahnhof:


mhm - er erbt doch von Container...  ???:L


----------



## meez (8. Okt 2004)

deathbyaclown hat gesagt.:
			
		

> meez hat gesagt.:
> 
> 
> 
> ...



Eben JFrame erbt von Container...
Um zu serialisieren, dürfen keine Swing-Komponenten mehr vorhanden sein...


----------



## bygones (8. Okt 2004)

ups - das habe ich ja ganz übersehen dass bei ihm alles eins ist


----------



## Oni (8. Okt 2004)

wenn es automatisch beim öffnen vom fenster geladen werden soll, muss es dann in die main-methode? 
in was für einem format muss ich speichern? 
was muss ich schreiben um alles zu speichern? 
unten meine versuche


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

public class Telefonbuch extends Container implements ActionListener, WindowListener, Serializable
{
	private int x = 20, o = 0;
     private Telefonbuch tele;
     private Button suchen, neuerEintrag;
     private static MenuItem close, change;
     private String antiFormV;
     private String antiFormN;
     private String nameN;
     private String nameV;
     private String email;
     private String festNr;
     private String mobilNr;
     private String gesuchtN;
     private String gesuchtV;
     private String leer;
     private TextArea anzeigen;
     private TextField suchEingabeN;
     private TextField suchEingabeV;

     private TextField neuerN;
     private TextField neuerV;
     private TextField neueTele;
     private TextField neueMobil;
     private TextField neueEmail;

     private int go = 0, go2 = 0, s = 0, s2 = 0, y = 0;
      Telefonbuch[] verzeichnis = new Telefonbuch[150];

	public static void main(String[] args)
     	{
          Telefonbuch t = new Telefonbuch();     //   <-- Unterschied --- Vorher Frame f = new Telefonbuch();
          Frame f = new Frame();                 //   <--------------------- Unterschied

          f.setVisible(true);
          f.setSize(400, 420);
          f.setLocation(50, 50);
          f.add(t);
          f.addWindowListener(t);

          f.setTitle("Telefonbuch");
          f.setLayout(null);
/* MenuBar */
          MenuBar b1 = new MenuBar();
/* Menu 1 */
          Menu m1 = new Menu("Datei");

          close = new MenuItem("Schliessen");
          m1.add(close);
          close.addActionListener(t);

          b1.add(m1);
          f.setMenuBar(b1);
          }

     public Telefonbuch()
     	{
          Label l1 = new Label("Nachname:");
		add(l1);
          l1.setBounds(10, 90, 70, 25);
          suchEingabeN = new TextField();
          add(suchEingabeN);
          suchEingabeN.setBounds(80, 90, 100, 25);
          suchEingabeN.addActionListener(this);

          Label l2 = new Label("Vorname:");
		add(l2);
          l2.setBounds(10, 60, 70, 25);
          suchEingabeV = new TextField();
          add(suchEingabeV);
          suchEingabeV.setBounds(80, 60, 100, 25);
          suchEingabeV.addActionListener(this);

          suchen = new Button("Suchen");
          add(suchen);
          suchen.setBounds(190, 60, 80, 25);
          suchen.addActionListener(this);

          anzeigen = new TextArea();
          add(anzeigen);
          anzeigen.setBounds(10, 130, 380, 105);

     /* ------------------------------------------------*/

          Label l3 = new Label("Vorname:");
		add(l3);
          l3.setBounds(10, 240, 90, 25);
          neuerV = new TextField();
          add(neuerV);
          neuerV.setBounds(120, 240, 120, 25);
          neuerV.addActionListener(this);

          Label l4 = new Label("Nachname:");
		add(l4);
          l4.setBounds(10, 270, 90, 25);
          neuerN = new TextField();
          add(neuerN);
          neuerN.setBounds(120, 270, 120, 25);
          neuerN.addActionListener(this);

          Label l5 = new Label("Telefonnummer:");
		add(l5);
          l5.setBounds(10, 300, 90, 25);
          neueTele = new TextField();
          add(neueTele);
          neueTele.setBounds(120, 300, 120, 25);
          neueTele.addActionListener(this);

          Label l6 = new Label("Mobilnummer:");
		add(l6);
          l6.setBounds(10, 330, 90, 25);
          neueMobil = new TextField();
          add(neueMobil);
          neueMobil.setBounds(120, 330, 120, 25);
          neueMobil.addActionListener(this);

          Label l7 = new Label("Email");
		add(l7);
          l7.setBounds(10, 360, 90, 25);
          neueEmail = new TextField();
          add(neueEmail);
          neueEmail.setBounds(120, 360, 120, 25);
          neueEmail.addActionListener(this);

          neuerEintrag = new Button("Neuer Eintrag");
          add(neuerEintrag);
          neuerEintrag.setBounds(280, 360, 80, 25);
          neuerEintrag.addActionListener(this);
          }


     public void windowClosing(WindowEvent event)
     	{
          System.exit(0);
          }

     public void windowIconified(WindowEvent event)
     	{
          }

     public void windowOpened(WindowEvent event)
     	{
          }

     public void windowClosed(WindowEvent event)
     	{
          }

     public void windowDeiconified(WindowEvent event)
     	{
          }

     public void windowActivated(WindowEvent event)
     	{
          }

     public void windowDeactivated(WindowEvent event)
     	{
          }


     public void actionPerformed(ActionEvent event)
     	{
          if(event.getSource() == suchen)
          	{
               go = 0;
               go2 = 0;

               antiFormN = suchEingabeN.getText();
               gesuchtN = antiFormN.replaceAll(" ", "");
               if(gesuchtN.equals(""))
               	{
                    }
               else
               	{
                    go = 1;
                    }

               antiFormV = suchEingabeV.getText();
               gesuchtV = antiFormV.replaceAll(" ", "");
               if(gesuchtV.equals(""))
               	{
                    }
               else
               	{
                    go2 = 1;
                    }

               s = 0;
               s2 = 0;
               suchEingabeV.setText("");
               suchEingabeN.setText("");
               anzeigen.setText("");
               }
          if(event.getSource() == close)
          	{
               Telefonbuch t = verzeichnis; //??   Objeckt, welches gespeichert werden soll
			String file = safe.txt; // Datei zum Speichern  ---->  Datei welcher Art?

			ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
			out.writeObject(t);
			out.close();

               System.exit(0);
               }

          if(event.getSource() == neuerEintrag)
          	{
               go = 0;
               go2 = 0;
               s = 0;
               s2 = 0;
               suchEingabeV.setText("");
               suchEingabeN.setText("");

               while(verzeichnis[o] != null)
               	{
                    o++;
                    }
               verzeichnis[o] = new Telefonbuch();
               verzeichnis[o].nameN = neuerN.getText();
     		verzeichnis[o].nameV = neuerV.getText();
     		verzeichnis[o].festNr = neueTele.getText();
         		verzeichnis[o].mobilNr = neueMobil.getText();
          	verzeichnis[o].email = neueEmail.getText();

               neuerN.setText("");
               neuerV.setText("");
               neueTele.setText("");
               neueMobil.setText("");
               neueEmail.setText("");
               anzeigen.setText("");
               }
          repaint();
          }

   	 public void paint(Graphics g)
		{
          verzeichnis[0] = new Telefonbuch();
          verzeichnis[1] = new Telefonbuch();
          verzeichnis[2] = new Telefonbuch();
          verzeichnis[3] = new Telefonbuch();

          verzeichnis[0].nameN = "Test1";
     	verzeichnis[0].nameV = "test1";
     	verzeichnis[0].festNr = "06555/XXXXXX";
     	verzeichnis[0].mobilNr = "0173/XXXXXXX";
          verzeichnis[0].email = "test1";

          verzeichnis[1].nameN = "Test2";
     	verzeichnis[1].nameV = "test2";
     	verzeichnis[1].festNr = "06555/XXXXXX";
     	verzeichnis[1].mobilNr = "0173/XXXXXXX";
          verzeichnis[1].email = "test2";

          verzeichnis[2].nameN = "Test3";
     	verzeichnis[2].nameV = "test3";
     	verzeichnis[2].festNr = "06555/XXXXXX";
     	verzeichnis[2].mobilNr = "0173/XXXXXXX";
          verzeichnis[2].email = "test3";

          verzeichnis[3].nameN = "Test4";
     	verzeichnis[3].nameV = "test4";
     	verzeichnis[3].festNr = "06555/XXXXXX";
     	verzeichnis[3].mobilNr = "0173/XXXXXXX";
          verzeichnis[3].email = "test4";

		if(go == 1)
          	{
     		while(! verzeichnis[s].nameN.equals(gesuchtN))
                    s++;
               	if(verzeichnis[s].nameN.equals(gesuchtN))
                    	anzeigen.setText("Vorname: " + verzeichnis[s].nameV + "\n" + "Nachname: " + verzeichnis[s].nameN + "\n"
               		+ "Telefonnummer: " + verzeichnis[s].festNr + "\n" + "Handynummer: " + verzeichnis[s].mobilNr + "\n" + "Email: " + verzeichnis[s].email);
               }
           if(go2 == 1)
          	{
     		while(! verzeichnis[s2].nameV.equals(gesuchtV))
     			s2++;
                      if(verzeichnis[s2].nameV.equals(gesuchtV))
          			anzeigen.setText("Vorname: " + verzeichnis[s2].nameV + "\n" + "Nachname: " + verzeichnis[s2].nameN + "\n"
               		+ "Telefonnummer: " + verzeichnis[s2].festNr + "\n" + "Handynummer: " + verzeichnis[s2].mobilNr + "\n" + "Email: " + verzeichnis[s2].email);
               }
           }
}
```


----------



## Oni (8. Okt 2004)

Darf ich nicht von container erben?
so lässt es sich kompilieren aber ich speicher glaube ich das flasche objekt bzw ich weis nicht genauw was ich eigentlich speicher. habe den code von galileocomputing.de.


```
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

public class Telefonbuch extends Container implements ActionListener, WindowListener, Serializable
{
	private int x = 20, o = 0;
     private Button suchen, neuerEintrag;
     private static MenuItem close, change;
     private String antiFormV;
     private String antiFormN;
     private String nameN;
     private String nameV;
     private String email;
     private String festNr;
     private String mobilNr;
     private String gesuchtN;
     private String gesuchtV;
     private TextArea anzeigen;
     private TextField suchEingabeN;
     private TextField suchEingabeV;

     private TextField neuerN;
     private TextField neuerV;
     private TextField neueTele;
     private TextField neueMobil;
     private TextField neueEmail;

     private static String buchSpeicher = "c:/Telefonbuch.ser";
     private int go = 0, go2 = 0, s = 0, s2 = 0, y = 0;
      Telefonbuch[] verzeichnis = new Telefonbuch[150];

	public static void main(String[] args)
     	{
          Telefonbuch t = new Telefonbuch();     //   <-- Unterschied --- Vorher Frame f = new Telefonbuch();
          Frame f = new Frame();                 //   <--------------------- Unterschied

          f.setTitle("Telefonbuch");
          f.add(t);
          f.setLocation(50, 50);
          f.setSize(400, 450);
          f.setVisible(true);
          f.addWindowListener(t);

          deserialize(buchSpeicher);
/* MenuBar */
          MenuBar b1 = new MenuBar();
/* Menu 1 */
          Menu m1 = new Menu("Datei");
          close = new MenuItem("Schliessen");
          m1.add(close);
          close.addActionListener(t);
          b1.add(m1);
          f.setMenuBar(b1);
          }

   	static void deserialize(String buchSpeicher)
  		{
    		try
    			{
      		FileInputStream file = new FileInputStream(buchSpeicher);
      		ObjectInputStream o = new ObjectInputStream( file );
      		String string = (String) o.readObject();
      		Telefonbuch t = (Telefonbuch) o.readObject();
      		o.close();
      		System.out.println(string);
      		System.out.println(t);
    			}
    		catch(IOException e)
            	{
               System.err.println(e);
               }
    		catch(ClassNotFoundException e)
          	{
               System.err.println(e);
               }
  		}

       static void serialize(String buchSpeicher)
  	 	{
               try
    				{
      			FileOutputStream file = new FileOutputStream(buchSpeicher);
      			ObjectOutputStream o = new ObjectOutputStream(file);
      			o.writeObject("verzeichnis[]");
      			o.writeObject(new Telefonbuch());
      			o.close();
    			}
    			catch (IOException e)
               	{
                    System.err.println(e);
                    }
  		}


     public Telefonbuch()
     	{
          setLayout(null);
          Label l1 = new Label("Nachname:");
		add(l1);
          l1.setBounds(10, 90, 70, 25);
          suchEingabeN = new TextField();
          add(suchEingabeN);
          suchEingabeN.setBounds(80, 90, 100, 25);
          suchEingabeN.addActionListener(this);

          Label l2 = new Label("Vorname:");
		add(l2);
          l2.setBounds(10, 60, 70, 25);
          suchEingabeV = new TextField();
          add(suchEingabeV);
          suchEingabeV.setBounds(80, 60, 100, 25);
          suchEingabeV.addActionListener(this);

          suchen = new Button("Suchen");
          add(suchen);
          suchen.setBounds(190, 60, 80, 25);
          suchen.addActionListener(this);

          anzeigen = new TextArea();
          add(anzeigen);
          anzeigen.setBounds(10, 130, 380, 105);

     /* ------------------------------------------------*/

          Label l3 = new Label("Vorname:");
		add(l3);
          l3.setBounds(10, 240, 90, 25);
          neuerV = new TextField();
          add(neuerV);
          neuerV.setBounds(120, 240, 120, 25);
          neuerV.addActionListener(this);

          Label l4 = new Label("Nachname:");
		add(l4);
          l4.setBounds(10, 270, 90, 25);
          neuerN = new TextField();
          add(neuerN);
          neuerN.setBounds(120, 270, 120, 25);
          neuerN.addActionListener(this);

          Label l5 = new Label("Telefonnummer:");
		add(l5);
          l5.setBounds(10, 300, 90, 25);
          neueTele = new TextField();
          add(neueTele);
          neueTele.setBounds(120, 300, 120, 25);
          neueTele.addActionListener(this);

          Label l6 = new Label("Mobilnummer:");
		add(l6);
          l6.setBounds(10, 330, 90, 25);
          neueMobil = new TextField();
          add(neueMobil);
          neueMobil.setBounds(120, 330, 120, 25);
          neueMobil.addActionListener(this);

          Label l7 = new Label("Email");
		add(l7);
          l7.setBounds(10, 360, 90, 25);
          neueEmail = new TextField();
          add(neueEmail);
          neueEmail.setBounds(120, 360, 120, 25);
          neueEmail.addActionListener(this);

          neuerEintrag = new Button("Neuer Eintrag");
          add(neuerEintrag);
          neuerEintrag.setBounds(280, 360, 80, 25);
          neuerEintrag.addActionListener(this);
          }


     public void windowClosing(WindowEvent event)
     	{
          serialize(buchSpeicher);
          System.exit(0);
          }

     public void windowIconified(WindowEvent event)
     	{
          }

     public void windowOpened(WindowEvent event)
     	{
          }

     public void windowClosed(WindowEvent event)
     	{
          }

     public void windowDeiconified(WindowEvent event)
     	{
          }

     public void windowActivated(WindowEvent event)
     	{
          }

     public void windowDeactivated(WindowEvent event)
     	{
          }


     public void actionPerformed(ActionEvent event)
     	{
          if(event.getSource() == suchen)
          	{
               go = 0;
               go2 = 0;

               antiFormN = suchEingabeN.getText();
               gesuchtN = antiFormN.replaceAll(" ", "");
               if(gesuchtN.equals(""))
               	{
                    }
               else
               	{
                    go = 1;
                    }

               antiFormV = suchEingabeV.getText();
               gesuchtV = antiFormV.replaceAll(" ", "");
               if(gesuchtV.equals(""))
               	{
                    }
               else
               	{
                    go2 = 1;
                    }

               s = 0;
               s2 = 0;
               suchEingabeV.setText("");
               suchEingabeN.setText("");
               anzeigen.setText("");
               }
          if(event.getSource() == close)
          	{
               System.exit(0);
               }

          if(event.getSource() == neuerEintrag)
          	{
               go = 0;
               go2 = 0;
               s = 0;
               s2 = 0;
               suchEingabeV.setText("");
               suchEingabeN.setText("");

               while(verzeichnis[o] != null)
               	{
                    o++;
                    }
               verzeichnis[o] = new Telefonbuch();
               verzeichnis[o].nameN = neuerN.getText();
     		verzeichnis[o].nameV = neuerV.getText();
     		verzeichnis[o].festNr = neueTele.getText();
         		verzeichnis[o].mobilNr = neueMobil.getText();
          	verzeichnis[o].email = neueEmail.getText();

               neuerN.setText("");
               neuerV.setText("");
               neueTele.setText("");
               neueMobil.setText("");
               neueEmail.setText("");
               anzeigen.setText("");
               }
          repaint();
          }

      public void paint(Graphics g)
		{
          verzeichnis[0] = new Telefonbuch();
          verzeichnis[1] = new Telefonbuch();
          verzeichnis[2] = new Telefonbuch();
          verzeichnis[3] = new Telefonbuch();

          verzeichnis[0].nameN = "Test1";
     	verzeichnis[0].nameV = "test1";
     	verzeichnis[0].festNr = "06555/XXXXXX";
     	verzeichnis[0].mobilNr = "0173/XXXXXXX";
          verzeichnis[0].email = "test1";

          verzeichnis[1].nameN = "Test2";
     	verzeichnis[1].nameV = "test2";
     	verzeichnis[1].festNr = "06555/XXXXXX";
     	verzeichnis[1].mobilNr = "0173/XXXXXXX";
          verzeichnis[1].email = "test2";

          verzeichnis[2].nameN = "Test3";
     	verzeichnis[2].nameV = "test3";
     	verzeichnis[2].festNr = "06555/XXXXXX";
     	verzeichnis[2].mobilNr = "0173/XXXXXXX";
          verzeichnis[2].email = "test3";

          verzeichnis[3].nameN = "Test4";
     	verzeichnis[3].nameV = "test4";
     	verzeichnis[3].festNr = "06555/XXXXXX";
     	verzeichnis[3].mobilNr = "0173/XXXXXXX";
          verzeichnis[3].email = "test4";

		if(go == 1)
          	{
     		while(! verzeichnis[s].nameN.equals(gesuchtN))
                    s++;
               	if(verzeichnis[s].nameN.equals(gesuchtN))
                    	anzeigen.setText("Vorname: " + verzeichnis[s].nameV + "\n" + "Nachname: " + verzeichnis[s].nameN + "\n"
               		+ "Telefonnummer: " + verzeichnis[s].festNr + "\n" + "Handynummer: " + verzeichnis[s].mobilNr + "\n" + "Email: " + verzeichnis[s].email);
               }
           if(go2 == 1)
          	{
     		while(! verzeichnis[s2].nameV.equals(gesuchtV))
     			s2++;
                      if(verzeichnis[s2].nameV.equals(gesuchtV))
          			anzeigen.setText("Vorname: " + verzeichnis[s2].nameV + "\n" + "Nachname: " + verzeichnis[s2].nameN + "\n"
               		+ "Telefonnummer: " + verzeichnis[s2].festNr + "\n" + "Handynummer: " + verzeichnis[s2].mobilNr + "\n" + "Email: " + verzeichnis[s2].email);
               }
           }
}
```


----------



## meez (8. Okt 2004)

Ich hab dein Program mal fertig gemacht...
Hab dabei zwei Klassen gemacht...
In der Klasse Telefonbuch ist das GUI...In dieser Klasse hat es einen Vector, der die Einträge hält (Klasse Eintrag) 
Dieser Vector wird beim Starten eingelesen und beim Verlassen gespeichert...


==============================================
Klasse Telefonbuch



```
import java.awt.*;
import java.awt.event.*;
import java.util.*;

import java.io.*;

public class Telefonbuch extends Frame implements ActionListener,
    WindowListener
{

  private Button suchen, neuerEintrag;

  private TextField neuerN;

  private TextField neuerV;
  private TextField neueTele;
  private TextField neueMobil;
  private TextField neueEmail;

  private TextArea anzeigen;
  private TextField suchEingabeN;
  private TextField suchEingabeV;

  private Vector tele;

  private String telefonbuchdatei = "./telefonbuch.tel";

  public Telefonbuch()
  {
    tele = readBuch(telefonbuchdatei);
    init();

  }

  private Vector readBuch(String datei)
  {
    try
    {
      ObjectInputStream in = new ObjectInputStream(new FileInputStream(datei));
      return (Vector) in.readObject();
    }
    catch (Exception e)
    {
    }
    return new Vector();

  }

  private void writeBuch(String datei)
  {
    try
    {

      ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(
          datei));
      out.writeObject(tele);
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

  private void init()
  {

    setVisible(true);
    setSize(400, 420);
    setLocation(50, 50);

    addWindowListener(this);

    setTitle("Telefonbuch");
    setLayout(null);

    Label l1 = new Label("Nachname:");
    add(l1);
    l1.setBounds(10, 90, 70, 25);
    suchEingabeN = new TextField();
    add(suchEingabeN);
    suchEingabeN.setBounds(80, 90, 100, 25);
    suchEingabeN.addActionListener(this);

    Label l2 = new Label("Vorname:");
    add(l2);
    l2.setBounds(10, 60, 70, 25);
    suchEingabeV = new TextField();
    add(suchEingabeV);
    suchEingabeV.setBounds(80, 60, 100, 25);
    suchEingabeV.addActionListener(this);

    suchen = new Button("Suchen");
    add(suchen);
    suchen.setBounds(190, 60, 80, 25);
    suchen.addActionListener(this);

    anzeigen = new TextArea();
    add(anzeigen);
    anzeigen.setBounds(10, 130, 380, 105);

    /* ------------------------------------------------ */

    Label l3 = new Label("Vorname:");
    add(l3);
    l3.setBounds(10, 240, 90, 25);
    neuerV = new TextField();
    add(neuerV);
    neuerV.setBounds(120, 240, 120, 25);
    neuerV.addActionListener(this);

    Label l4 = new Label("Nachname:");
    add(l4);
    l4.setBounds(10, 270, 90, 25);
    neuerN = new TextField();
    add(neuerN);
    neuerN.setBounds(120, 270, 120, 25);
    neuerN.addActionListener(this);

    Label l5 = new Label("Telefonnummer:");
    add(l5);
    l5.setBounds(10, 300, 90, 25);
    neueTele = new TextField();
    add(neueTele);
    neueTele.setBounds(120, 300, 120, 25);
    neueTele.addActionListener(this);

    Label l6 = new Label("Mobilnummer:");
    add(l6);
    l6.setBounds(10, 330, 90, 25);
    neueMobil = new TextField();
    add(neueMobil);
    neueMobil.setBounds(120, 330, 120, 25);
    neueMobil.addActionListener(this);

    Label l7 = new Label("Email");
    add(l7);
    l7.setBounds(10, 360, 90, 25);
    neueEmail = new TextField();
    add(neueEmail);
    neueEmail.setBounds(120, 360, 120, 25);
    neueEmail.addActionListener(this);

    neuerEintrag = new Button("Neuer Eintrag");
    add(neuerEintrag);
    neuerEintrag.setBounds(280, 360, 80, 25);
    neuerEintrag.addActionListener(this);

  }

  public void windowClosing(WindowEvent event)
  {
    writeBuch(telefonbuchdatei);
    System.exit(0);
  }

  public void windowIconified(WindowEvent event)
  {
  }

  public void windowOpened(WindowEvent event)
  {
  }

  public void windowClosed(WindowEvent event)
  {
  }

  public void windowDeiconified(WindowEvent event)
  {
  }

  public void windowActivated(WindowEvent event)
  {
  }

  public void windowDeactivated(WindowEvent event)
  {
  }

  public void actionPerformed(ActionEvent event)
  {
    if (event.getSource() == suchen)
    {
      Eintrag e;

      for (int n = 0; n < tele.size(); n++)
      {
        e = (Eintrag) tele.get(n);

        if (e.getVName().equals(suchEingabeV.getText())
            || e.getNName().equals(suchEingabeN.getText()))
        {
          addToAnzeigen(e);
        }
      }

    }

    if (event.getSource() == neuerEintrag)
    {

      Eintrag e = new Eintrag();
      e.setVName(neuerV.getText());
      e.setNName(neuerV.getText());
      e.setPhone(neueTele.getText());
      e.setMobile(neueMobil.getText());
      e.setEMail(neueEmail.getText());

      tele.add(e);

    }

  }

  private void addToAnzeigen(Eintrag e)
  {
    StringBuffer buffer = new StringBuffer().append(anzeigen.getText());

    buffer.append("Vorname: " + e.getVName() + "\n");
    buffer.append("Nachname: " + e.getNName() + "\n");
    buffer.append("Telefonnummer: " + e.getPhone() + "\n");
    buffer.append("Handynummer: " + e.getMobile() + "\n");
    buffer.append("Email: " + e.getEMail() + "\n");

    anzeigen.setText(buffer.toString());

  }

  public static void main(String[] x)
  {
    new Telefonbuch().show();
  }

}
```






==============================================
Klasse Eintrag


```
import java.io.Serializable;

public class Eintrag implements Serializable
{

  private String vorname = "";
  private String nachname = "";
  private String telefon = "";
  private String mobile = "";
  private String email = "";

  public void setVName(String vorname)
  {
    this.vorname = vorname;
  }

  public void setNName(String nachname)
  {
    this.nachname = nachname;
  }

  public void setPhone(String telefon)
  {
    this.telefon = telefon;
  }

  public void setMobile(String mobile)
  {
    this.mobile = mobile;
  }

  public void setEMail(String email)
  {
    this.email = email;
  }

  public String getVName()
  {
    return vorname;
  }

  public String getNName()
  {
    return nachname;
  }

  public String getPhone()
  {
    return telefon;
  }

  public String getMobile()
  {
    return mobile;
  }

  public String getEMail()
  {
    return email;
  }

}
```


----------



## Gast (8. Okt 2004)

Wau, es funktioniert. DANKE

ich probier jetzt mal zu verstehen was du gemacht hast.


----------



## Oni (8. Okt 2004)

Ich dachte init() wäre nur für applets? und in Telefonbuch zeile205 ist ein fehler. es müsste heissen neuerN nicht neuerV ;-)

im großen und ganzen ist mir das aber jetzt zu kompliziert, das hätte ich so nicht auf die reihe bekommen. 
soweit bin ich noch nicht.


----------



## meez (8. Okt 2004)

Bei Applets ist init() eine spezielle Methode....
Das init, was ich benutzt habe, hat keine Bedeutung...Du kannst die Methode auch schlagmichtot() nennen...
Man könnte das ganze sogar direkt in den Konstruktor schreiben...


----------



## L-ectron-X (8. Okt 2004)

meez, trotz der Mühe ( :toll: )...
...eins hast Du noch vergessen und ich möchte es an dieser Stelle gerne ergänzen.
In die Klasse _Eintrag_ gehört ein solches Datenfeld:

```
private static final long serialVersionUID = 1; //Wert für long frei wählbar
```
Dieses Datenfeld stellt die Serialisierungskompatibilität für die Klasse _Eintrag_ bei einer Veränderung der Datenstruktur (Programmerweitererung/-modifikation) sicher.
Wird kein solches Datenfeld eingefügt, kann ein Objekt einer serialisierten Klasse nach einer Code-Modifikation nicht mehr deserialisiert werden.
Ab Java 5 (1.5) wird Code mit implementierter Serializable-Schnittstelle ohne dieses Datenfeld nicht mehr kompiliert.


----------



## meez (8. Okt 2004)

Eigentlich sogar..:


```
private static final long serialVersionUID = 1L;
```


Hab isch versifft die UID reinzutun...


----------



## Oni (9. Okt 2004)

Was bewirkt eigentlich ein vektor ?


----------



## foobar (9. Okt 2004)

Ein Vector ist eine Datenstruktur, die bei Bedarf automatisch vergrößert wird.
http://www.galileocomputing.de/open...el_11_002.htm#Rxx365java110020400038D1F0121FD


----------



## meez (9. Okt 2004)

Oni hat gesagt.:
			
		

> Was bewirkt eigentlich ein vektor ?



Ein dynamisch wachsender Array....


----------

